c# - ASP.net c# 试图在服务器上运行可执行文件

标签 c# asp.net iis-7 executable

我有这种通过在我们的服务器上运行 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 中的某些内容吗?

最佳答案

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

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

然后在等待几秒钟让进程完成它的工作后,在调试 session 中调查 pLicenseGenerator 对象的属性。该对象将属于 Process类,我会特别注意 .ExitCode 属性。在设计良好的控制台应用程序中,如果程序遇到错误(如旧的 DOS %ERRORLEVEL% 变量),这将被设置为非零值。

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

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

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

关于c# - ASP.net c# 试图在服务器上运行可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963271/

相关文章:

c# - 如何根据自定义顺序订购列表项?

c# - WCF 数据服务的 VerificationException

ASP.NET(MVC)Outputcache和并发请求

c# - 如何通过更改同一 ListView 行中下拉列表的项目来更新文本框中的文本

c# - 用户取消查询时如何回滚SQL CLR存储过程?

python - 使用 Python 向 ASPX 页面提交请求时出错

iis-7 - 为 IIS7 网站配置带有重定向的自定义 ASP 404 页面

php - Yii2/PHP/IIS7 - URL 重写和文件权限(漂亮的 URL 问题)

c# - 内存中的虚拟数据库

c# - 是否有将 IEnumerator 转换为 IEnumerable 的内置方法