Tag: 进程

来自C#进程类的无效操作exception

当我使用VSTS调试器查看类Process实例的属性时,许多属性都标有InvalidOperationException 。 为什么? 我做错了吗? 我正在使用VSTS 2008 + C#+ .Net 2.0来开发控制台应用程序。 这是我的代码: System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); myProcess.StartInfo.FileName = “IExplore.exe”; myProcess.StartInfo.Arguments = @”www.google.com”; myProcess.StartInfo.Verb = “runas”; myProcess.Start(); 以及调试器的屏幕截图:

使用C#Process运行可执行程序

我是Bioinformatic的人,我使用C#来完成我的工作。 我一直在C#中使用Processes多次运行可执行程序。 这次我有一个新问题。 我在Windows中为一个名为Blast的程序下载了一个exe文件( http://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=BlastDocs&DOC_TYPE=Download )。 如果我输入我的命令是: blastp -query input.txt -db pdbaa -out output.txt 它工作正常。 但是当我从记事本中复制粘贴命令时会出错。 我搜索了这个问题,发现它是“编码问题UTF-8与ISO-latin”( http://biostar.stackexchange.com/questions/7997/an-error-by-using-ncbi-blast- 2-2-25-on-windows )由复制和粘贴引起。 既然我想从c#运行进程来调用exe文件我得到了同样的问题,我想这是因为这个过程做了像复制和粘贴这样的事情。 这是我的代码: public void Calculate() { Process proc = new Process(); proc.StartInfo.WorkingDirectory = Program.NCBIBlastDirectory; proc.StartInfo.FileName = @”C:\Program Files\NCBI\blast-2.2.25+\bin\blastp.exe”; proc.StartInfo.Arguments = “blastp -query input.txt -db pdbaa -out output.txt”; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardError = […]

C# – 干净地关闭OpenVPN

我们编写了一个应用程序,它位于控制OpenVPN的托盘中,作为更大应用程序的扩展。 如果在命令行上运行openvpn.exe,可以按F4关闭它。 我们需要从C#发送相同的按键,但您只能将字符串值发送到StandardInput。 我们被迫杀死OpenVpn以关闭它,这似乎在Vista上偶尔引起BSOD …… 这是我在MSDN上发布的post的链接,它也描述了这个问题: MSDN论坛 有谁知道如何使用StandardInput向进程发送特殊击键? 或者更简洁地关闭OpenVPN的解决方法? 更新: 传递给StandardInput.Write()时,以下内容不起作用,F1键在此示例中: ConsoleKey.F1 “\ x70”(F1的hex值) Convert.ToChar((INT)ConsoleKey.F1) 我们已经正确地重定向输入/输出,因为我们可以成功地将用户名/密码传递给OpenVPN而没有任何问题。 更新2:在OpenVPN的一些命令行选项文档中找到这个: –service exit-event [0 | 1]当在这样的环境中由另一个程序自动执行OpenVPN时,应该使用它,以便不能通过显示器或键盘与用户交互。 通常,最终用户永远不需要显式使用此选项,因为当给定的OpenVPN配置作为服务运行时,OpenVPN服务包装器会自动添加该选项。 exit-event是Windows全局事件对象的名称,OpenVPN将持续监视此事件对象的状态,并在发出信号时退出。 第二个参数表示退出事件的初始状态,通常默认为0。 可以使用相同的exit-event参数同时执行多个OpenVPN进程。 在任何情况下,控制过程都可以发出退出事件的信号,导致所有这样的OpenVPN进程退出。 我如何在C#中使用它? “退出事件”是否表明他们正在提及Mutex?

使用C#退出excel(使用excel自动化时)

我正在使用c#来读取/写入excel电子表格中的数据。 我正在使用这三个语句来打开我的excel文件 Excel.Application excelapp = new Excel.Application(); Excel._Worksheet worksheet = (Excel._Worksheet)workbook.ActiveSheet; Excel._Worksheet worksheet = (Excel._Worksheet)workbook.ActiveSheet; 并且这两行用于关闭/保存工作表。 workbook.Save(); workbook.Close(); 我遇到的问题是EXCEL进程仍处于活动状态。 (我使用任务管理器进行检查。)在读取/写入数据到工作表后,我有20个EXCEL进程处于活动状态。 如果有人能在我关闭工作簿之后立即向我展示一个结束excelapp proc的技术。 非常感谢,亚伦。

可以通过2个不同的进程共享相同的DLL数据吗?

我有两个不同的C#应用​​程序同时运行。 我希望他们两个都能够访问DLL的相同“实例”(也在C#中)。 DLL保存了一些我想要返回到两个应用程序要求的数据。 我的DLL是线程安全的,所以我希望这是可能的,但我不知道如何。 任何帮助或建议将不胜感激。

以编程方式在cmista中运行cmd.exe作为管理员,c#

我有一个visual studio设置和部署项目。 我在其中添加了一个.cmd脚本。 该脚本需要管理员权限才能运行。 当用户单击setup.exe时,UAC会提示用户输入管理员权限。 所以我假设在setup.exe中创建和调用的所有进程都将以管理员身份运行。 所以我设置调用我的控制台应用程序,其中包含以下代码。 ProcessStartInfo p1 = new ProcessStartInfo(); p1.UseShellExecute = true; p1.Verb = “runas”; p1.FileName = “cmd.exe”; Process.Start(p1); 所以它应该工作,因为它在管理员空间下运行。 我想通过c#进程类作为管理员运行cmd.exe。我正在运行windows vista。 我试过没办法! 我能做什么!

在将命令提示符输出重定向到winform时遇到Process类问题

我在市场上寻找一个“选项卡式”命令提示应用程序,因为当我想到创建自己的桌面屏幕时,我厌倦了多个命令提示窗口混乱我的桌面屏幕。 虽然我知道它不会像独立产品那样伟大,但我认为创建自己的只是为了更熟悉“System.Diagnostic”类(Process,ProcessStartInfo等)将是一个很好的练习。我以前从未真正玩过。 我刚刚创建了一个准系统winforms应用程序,它有2个选项卡(包含richtextfields),一个文本字段(输入命令)和一个按钮(实际运行命令)。 我找到了各种post,展示了如何运行命令,但我遇到了实际执行命令并将结果返回到richtextbox的问题。 这是我根据我现在知道的信息创建的方法:(根据以前的答案更新) public void GetConsoleOuput(string command) { string outputString; ProcessStartInfo startupInfo = new ProcessStartInfo() startInfo.FileName = “cmd.exe”; startInfo.RedirectStandardOuput = true; startInfo.WindowStyle = ProcessWindowStyle.Hidden: startInfo.UseShellExecute = false; startInfo.Arguments(“/C ” + command); Process process = new Process() process.StartInfo = startInfo; process.OutputDataReceived += new DataReceivedEventHandler(AppendRichBoxText); process.Start() process.BeginOutputReadLine(); process.WaitForExit(); process.Close(); } public void AppendRichBoxTet(object sender, DataReceivedEventArgs […]

在WinForm项目选项卡中运行exe

我对使用winform应用程序执行以下操作感兴趣,我正在编写,以在Visual Studio 2010 IDE中的c#中的.exe中打开。 我现在可以通过使用以下代码在所需选项卡中单击按钮来打开程序: string str = @”-INSERT FILEPATH HERE-“;//took file path out as i have a few exes i’m wanting to add. Process process = new Process(); process.StartInfo.FileName = str; process.Start(); 现在我怎么能这样做,所以这个可执行文件作为选项卡打开或在选项卡中,在我的winform中? 我愿意接受任何一种情况的建议。 解决了: using System.Runtime.InteropServices; using System.Threading; [DllImport(“user32.dll”, SetLastError = true)] private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int […]

如何将进程输出重定向到System.String

我从.NET应用程序调用Java进程,我需要将控制台输出重定向到System.String以便稍后进行解析。 请指教。 我会很感激短代码示例。 public bool RunJava(string fileName) { try { ProcessStartInfo psi = new ProcessStartInfo(); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.EnvironmentVariables.Add(“VARIABLE1”, “1”); psi.FileName = “JAVA.exe”; psi.Arguments = “-Xmx256m jar.name”; Process.Start(psi); return true; } catch (Exception ex) { return false; } }

C#处理标准输出延迟

在C#表单中,我运行的进程启动信息类似于Redirect控制台输出到单独程序中的文本框和运行时的C#get进程输出 ,该进程正确运行 ,但输出需要很长时间才能出现在DataReceived事件中 。 我想在进程生成后立即看到文本; 根据Process标准输出无法捕获? (第一条评论)我需要等到事件被触发之前填充2到4 kb的缓冲区。 根据要求,这是代码: void pcs_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) { if (!string.IsNullOrEmpty(e.Data)) textBox1.BeginInvoke((Action)delegate { textBox1.AppendText(text + “\n”); }); } private void LER_Go_Click(object sender, EventArgs e) { // variables LiDARExtRep contains the full path to an executable file // that runs in DOS and produces verbose output. // LER_Path.Text is the […]