【问题标题】:Execute an external EXE with C#.NET使用 C#.NET 执行外部 EXE
【发布时间】:2012-10-15 10:54:38
【问题描述】:

我正在 C# 中执行一个进程,但我希望能够在不指定路径的情况下执行它。我可以将可执行文件放在项目中的什么位置,以便代码在不指定路径的情况下找到它?

目前我有:

        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = @"C:\Docs\wkhtmltopdf.exe";

运行良好,但我想最终得到的是:

        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = "wkhtmltopdf.exe";  

我尝试将 EXE 放在项目的文件夹中,在项目的根目录中,在项目的 bin 文件夹中 - 均未成功。

【问题讨论】:

  • 它需要与您自己的 .exe 位于同一目录中 - 通常是 bin/debug/

标签: c# asp.net


【解决方案1】:

随时放置二进制文件并将此文件夹添加到系统的 %PATH% 变量中

【讨论】:

  • 我应该提到最终我想将其部署为 Web 服务,因此我不一定有权访问 %PATH% 变量。除此之外,我还尝试将 EXE 放在 C:\Windows\System32 中,但它仍然没有找到它......
【解决方案2】:

我现在猜,但也许这会有帮助?

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

只需将此路径设置为Environment.CurrentDirectory

【讨论】:

  • Environment.CurrentDirectory 返回"C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\DevServer\\10.0"
【解决方案3】:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "wkhtmltopdf.exe";  
psi.WorkingDirectory = Environment.CurrentDirectory;
Process proc = Process.Start(psi);

【讨论】:

  • Environment.CurrentDirectory 返回"C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\DevServer\\10.0"
  • 您是否将此代码作为网站/网络服务运行?如果是,请尝试 HttpContext.Current.Server.MapPath("~/")
  • 好吧,这行得通 - 我没有将它作为 Web 代码运行(它只是一个 C# 类),但最终我希望它作为 Web 服务运行,所以这对我来说是一个很好的解决方案.遗憾的是,我没有足够的代表来支持你,否则我会 - 谢谢。
  • 您可以选择我的答案为正确的。对于未来:请直接在问题中提及项目的详细信息(您从服务中编码)
【解决方案4】:

我会使用Enviroment.SpecialFolders 之一。

然后您可以推断出正确的路径,而无需硬编码任何值或请求用户输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多