C#在引用中调用exe

时间:2012-09-11 11:13:37

标签: c# asp.net

我在我的asp.net项目中添加了一个exe文件作为参考。但似乎我无法使用进程触发它。目前我正在使用以下代码来触发我的exe。但它似乎只有当我给出exe的完整路径时才有效,例如“c:/file/myEXE.exe”

    process.StartInfo.FileName = "myEXE.exe";
    process.StartInfo.Arguments = path;
    process.StartInfo.CreateNoWindow = true;
    process.Start();
    process.WaitForExit();
    int exitCode = process.ExitCode;

我应该如何对其进行编码,以便该过程能够从我的引用中触发我的exe?

谢谢!

2 个答案:

答案 0 :(得分:0)

这里要说几点。

首先,正如其他人在评论中所说,您不需要添加可执行程序集作为项目的引用,只是将其复制到构建中的bin文件夹。只需将可执行文件添加为项目项,右键单击它并选择Properties以查看“属性”窗口并将Copy to Output Directory值更改为Copy if Newer。现在,无论何时构建项目,该文件都将被复制到bin / output文件夹。

其次,正如@trailmax在评论中也提到的那样,您可能希望提供可执行文件的完整路径,以确保它可以确定地找到它。

最后,当你提到这是一个ASP.NET项目时,你可能想看一下这篇知识库文章:

Unable to Start a Process from ASP.NET

我并不是说这就是您出现问题的原因,但这是可能的,因为如果您在IIS下运行,则可能没有必要的权限来启动新进程。

答案 1 :(得分:0)

是彼得,

感谢您的建议,现在我能够让它发挥作用。

public string checkPlatform(string path)
{
    //new process
    Process process = new Process();
    //required to change the path during hosting.
    string exelocation = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
    process.StartInfo.FileName = exelocation+"\\BitCheck.exe";
    process.StartInfo.Arguments = path;
    process.StartInfo.CreateNoWindow = true;
    process.Start();
    process.WaitForExit();
    int exitCode = process.ExitCode;
    switch (exitCode)
    {
        case 0:
            return "X86";
        case 1:
            return "X64";
        case 2:
            return "ANY";
        case 3:
            return "ERROR";
    }
    return "ERROR";
}

基本上,我只需要这一行来获取当前的工作目录路径

string exelocation = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

感谢您的建议和关注

干杯