【问题标题】:ASP.net c# trying to run an executable on serverASP.net c#试图在服务器上运行可执行文件
【发布时间】:2011-08-05 22:27:51
【问题描述】:

我有这种方法,它通过在我们的服务器上运行 exe 程序来生成许可证:

/// <summary>
/// Generate a new license
/// </summary>
public static void GenerateLicense(string Name, string EmailAddress, Licensing.Types.LicenseType Type, Licensing.Types.ProductTypes Product)
{
    string Params = "\"" + Licensing.Types.LicenseTypeToString(Type) + "\" \""
        + Licensing.Types.ProductTypeToString(Product)
        + "\" \"" + Name + "\" \""
        + EmailAddress + "\"";

    // Start license executable and pass in all the params
    Process.Start(Settings.LicenseExecutableLocation, Params);

}

它没有抛出任何错误,也没有明显地运行程序(它应该在服务器上创建一些文件)。可执行文件(Settings.LicenseExecutableLocation)的位置是C:\inetpub\wwwroot\licensegen.exe,这是正确的,参数也是正确的(我已经打印出来了)。

我正在运行 IIS7,它根本没有抛出 任何 错误,我需要在 IIS7 中进行更改吗?

【问题讨论】:

  • 文件根本没有运行(通过检查进程资源管理器验证),或者只是没有输出文件?
  • 您使用的是 Server 2008 吗?您是否尝试过从命令行运行该进程?
  • 谁在调用这个方法?每个网络请求(可能不是)或启动代码?
  • @Tom 我认为 Process Explorer (technet.microsoft.com/en-us/sysinternals/bb896653) 将跟踪进程是否打开然后快速关闭,因此您可以查看它是否真正开始。

标签: c# asp.net iis-7 executable


【解决方案1】:

由于您在启动进程时没有遇到异常,因此您需要了解它实际在做什么。我会将您的最后一行更改为

var pLicenseGenerator =  Process.Start(Settings.LicenseExecutableLocation, Params);

然后在等待几秒钟以等待进程执行其操作后,在调试会话中调查 pLicenseGenerator 对象的属性。这个对象将属于Process 类,我会特别注意.ExitCode 属性。在精心设计的控制台应用程序中,如果程序遇到错误(如旧的 DOS %ERRORLEVEL% 变量),这将设置为非零值。

如果.ExitCode 没有帮助,我建议将.StandardOutput 转储到网页或文件中以进行调试。

当我过去遇到类似问题时,我格式化进程输入参数的方式一直是个问题。有时,如果参数是长文件路径,则需要特别注意用双引号括起来的方式。

一个简单的步骤是吐出您传递给Process.Start() 的确切路径和参数,然后看看当您自己从命令行运行它们时会发生什么。如果它们工作正常,那么可能是某种与权限相关的问题,正如另一位发帖人推测的那样。

【讨论】:

    【解决方案2】:

    您可能遇到了权限问题。可执行文件是否与 Web 应用程序位于同一目录中?如果没有,您可能需要修改权限或考虑使用模拟。如果它确实驻留在同一目录中,则应尝试使用相对路径。您可能还需要取消控制台对话框 - 我遇到过这样的问题。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2014-01-25
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      相关资源
      最近更新 更多