从IIS8执行cmd文件

时间:2017-08-18 04:39:14

标签: c# iis-8

我有一段代码可以使用一些内置函数生成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上运行它时它永远不会工作。我已经尝试过在网络上提到的所有各种解决方案都没有用。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果不确定(通过一些错误日志,eventvwr屏幕截图),我的猜测就是你遇到了权限问题。

从IIS执行基于文件的操作时,您需要记住用于网站的AppPool标识。 AppPool Identity需要具有该特定文件夹的写入权限。

我建议将AppPool用户身份留给内置" ApplicationPoolIdentity",因为这是最安全的选择。

MSDN上有很多关于此主题的有用信息:https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities

具体了解如何添加文件权限的安全资源部分:https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources

在其他情况下,您可以覆盖给定AppPool的用户帐户,甚至可以覆盖网站上的用户帐户(例如模拟等),但如果您不这样做,那么上述情况应该有效。