我有这种通过在我们的服务器上运行 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/