我在我的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?
谢谢!
答案 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);
感谢您的建议和关注
干杯