我创建了一个WebApi项目,我在其中调用一个exe Latlong2XY.exe
,它将输入文件和outputfile作为参数。并返回一个.txt作为输出文件。当我从VS2012 IDE执行应用程序时,它成功创建了所需的txt文件。但是,当我在IIS中发布相同的应用程序并运行它时,它无法创建txt文件。
似乎IIS Express正在创建txt文件而IIS不是。
这似乎是一些许可问题。但是没有任何线索该做什么。 我的代码是:
int exitCode;
// Prepare the process to run
ProcessStartInfo start = new ProcessStartInfo();
// Enter in the command line arguments, everything you would enter after the executable name itself
start.Arguments = @"D:\RFD\InputFile.txt D:\RFD\Results.txt";
// Enter the executable to run, including the complete path
start.FileName = @"D:\RFD\Latlong2XY.exe";
// Do you want to show a console window?
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
// Run the external process & wait for it to finish
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
// Retrieve the app's exit code
exitCode = proc.ExitCode;
}
IIS设置为:
Windows身份验证:已禁用; 表单身份验证:禁用; Anon auth:启用; .Net模拟:已禁用。
我正在使用ASP.NET v4.0应用程序池。
答案 0 :(得分:0)
您需要提供应用程序目录(托管文件在计算机上的位置)提升权限。 (通常为C:\ inetpub \ wwwroot \ YourAppName)
将用户'IIS_USR'或接近该名称的内容写入文件夹。
答案 1 :(得分:0)
是的。当您从"Visual Studio IDE"
执行这些操作时,它将起作用,因为IDE
具有控制(System.Diagnostics.Process.Start)的IO操作的最小权限。
当您从IIS进行Web application
托管时,遗憾的是IIS在构建时没有这些权限设置。因此,您需要设置权限才能执行windows native operations
。
注意:通过使用此功能,您将提供加密的系统(服务器)用户名和密码。
您可以使用Aspnet_setreg.exe
在Web配置中设置Windows身份验证权限。哪些将在互联网上提供使用说明。
在网址中添加以下内容:
<authentication mode="Windows"/>
<identity impersonate ="true" userName="registry:HKLM\SOFTWARE\YourAPPName\ASPNET_SETREG,userName" password="registry:HKLM\SOFTWARE\YOURAPPNAME\ASPNET_SETREG,password"/>
在开发“Windows服务从Web重新启动”期间遇到的类似问题。相同的权限问题我已经解决并以这种方式工作。
这个答案可能并不完美。但这也是实现解决方案的一种方式