1

我在我的 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?

谢谢!

4

2 回答 2

0

这里要说明几点。

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

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

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

无法从 ASP.NET 启动进程

我并不是说这是您的问题的原因,但这是有可能的,因为如果您在 IIS 下运行,您可能没有启动新进程所需的权限。

于 2012-09-11T12:07:54.270 回答
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);

感谢您的建议和关注

干杯

于 2012-09-12T04:09:56.087 回答