[英]Execute a cmd file from IIS8
我有一段代码可以通过内置函数生成excel
string xmlfilePath = "C:\\Test\\standard_xml.xml";
string script = "C:\\Test\\script.vbs";
string template = "Template";
string cmdfilePath = @"C:\\Test\\executable.cmd";
if (File.Exists(cmdfilePath))
{
File.Delete(cmdfilePath);
}
using (FileStream fs = File.Create(cmdfilePath))
{
Byte[] info = new UTF8Encoding(true).GetBytes("\"" + script + "\"" + " " +
"\"" + template + "\"" + " \"" + xmlfilePath + "\"");
fs.Write(info, 0, info.Length);
}
var process = Process.Start(cmdfilePath);
process.WaitForExit();
此代码生成一个excel,并执行一些必需的操作。
在Visual Studio中进行测试时,这工作得很好,但是当我在iis8上运行它时,它将永远无法工作。 我尝试了网络上提到的所有各种解决方案,但没有任何效果。
任何帮助表示赞赏。
不确定(通过一些错误日志,eventvwr屏幕截图),我的猜测是您遇到了权限问题。
从IIS执行基于文件的操作时,您需要记住用于网站的AppPool身份。 AppPool身份将需要具有对该特定文件夹的写权限。
我建议将AppPool用户身份留给内置的“ ApplicationPoolIdentity”,因为这是最安全的选择。
在MSDN上有很多关于此主题的很好的信息: https : //docs.microsoft.com/zh-cn/iis/manage/configuring-security/application-pool-identities
专门查看安全资源部分,了解如何添加文件权限: https : //docs.microsoft.com/zh-cn/iis/manage/configuring-security/application-pool-identities#securing-resources
在其他情况下,您可以覆盖给定AppPool的用户帐户,甚至可以覆盖网站上的用户帐户(用于模拟等),但是如果您不这样做,则上面的方法应该有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.