无法使用 C# 代码运行 .exe 应用程序

Posted

技术标签:

【中文标题】无法使用 C# 代码运行 .exe 应用程序【英文标题】:Unable to run .exe application using C# code 【发布时间】:2010-03-31 04:06:24 【问题描述】:

我有一个 exe,需要从我的 C# 程序中调用,并带有两个参数(PracticeId、ClaimId)

例如: 假设我有一个应用程序test.exe,其功能是根据给定的两个参数进行声明。

在 cmd 上,我通常会给出以下命令:

test.exe 1 2

它工作正常并执行其转换工作。

但我想使用我的 c# 代码执行相同的操作。 我正在使用以下示例代码:

Process compiler = new Process();
compiler.StartInfo.FileName = "test.exe" ;
compiler.StartInfo.Arguments = "1 2" ;
compiler.StartInfo.UseShellExecute = true;
compiler.StartInfo.RedirectStandardOutput = true;
compiler.Start();

当我尝试使用上述代码调用test.exe 时,它无法执行其创建声明txt 文件的操作。

这其中的问题在哪里?是不是线程问题,我不知道。

谁能告诉我我需要在上面的代码中更改什么?

【问题讨论】:

你确定“test.exe”正在被执行吗?如果我必须打赌,我敢打赌它根本不会被执行。 【参考方案1】:

您提供的代码在我运行时失败并出现以下错误:

System.InvalidOperationException

Process 对象必须具有 UseShellExecute 属性设置为 false 为了重定向 IO 流。

以下代码正确执行并传递参数:

var compiler = new Process();
compiler.StartInfo.FileName = "test.exe";
compiler.StartInfo.Arguments = "1 2";
compiler.StartInfo.UseShellExecute = true;
compiler.StartInfo.RedirectStandardOutput = false;
compiler.Start();

【讨论】:

msg 说“进程对象必须将 UseShellExecute 属性设置为 false 才能重定向 IO 流”但您的代码使用 true? 正确,所以我还通过设置RedirectStandardOutput = false 禁用了重定向。这样才开心【参考方案2】:

虽然我还没有测试我的代码,但我希望这能帮助你做你想做的事......

Process.Start("xyz.exe", "1 2");

让我知道它是否有效。

【讨论】:

【参考方案3】:

检查您的工作目录是什么。 test.exe 在你的路径中吗?如果没有,您将需要提供路径。如果您知道路径在哪里,最好提供路径。您可以从应用程序路径、程序集执行路径或某些用户偏好设置中动态构建它。

【讨论】:

【参考方案4】:

MSDN 应该会有所帮助。他们看起来好像对网站进行了一些更新,并且针对您的特定问题的示例非常详细。

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

【讨论】:

以上是关于无法使用 C# 代码运行 .exe 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

从 C# windows 应用程序调用 C dll 会导致 svchost.exe 崩溃

与任务调度程序一起使用的应用程序无法在我的 C# 代码中创建目录

VS2010 安装项目在程序卸载时运行 .exe 或 C# 代码

从 C# 代码调试 C++ exe

无法使用 C# 运行 perl 脚本

计划启动 C# 应用程序无法为登录用户显示表单