繁体   English   中英

进程启动IIS服务器

[英]Process Start IIS Server

我无法从IIS成功调用Process.Start("DocToPDF.exe", "file.docx file.pdf")

  • 我尝试过允许IIS Admin Service进行桌面交互;
  • 我已经尝试向DefaultAppPool授予包含DocToPDF.exe的目录的完全控制权限

这些都没有奏效。 DocToPDF.exe以代码退出:1(我将退出代码写入文件...)。 当我以调试模式(F5)运行网站时,程序以代码退出:0,一切正常。 它在调试模式下运行良好。 我的猜测是它与IIS权限或类似的东西有关,因为我说它在从visual studio启动应用程序时效果很好。

这是我正在使用的方法:

public byte[] DocToPdf(MemoryStream ms)
{            
    string fileName = Guid.NewGuid().ToString();
    string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\" + fileName + ".docx";
    string newPath = path.Replace("docx", "pdf");
    FileStream fs = new FileStream(path.ToString(), FileMode.OpenOrCreate);
    fs.Write(ms.ToArray(), 0, ms.ToArray().Length);
    fs.Close();

    Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.FileName = @"C:\Utils\OfficeToPDF.exe";
    p.StartInfo.Arguments = path + " " + newPath;
    p.Start();
    p.WaitForExit();
    System.IO.File.WriteAllText(@"C:\Utils\exitcode.txt", p.ExitCode.ToString());

    var bytes = System.IO.File.ReadAllBytes(newPath);

    System.IO.File.Delete(path);
    System.IO.File.Delete(newPath);

    return bytes;            
}

从IIS网站/应用程序调用任何进程几乎总是一个可怕的想法。

  1. IIS及其工作进程在会话0中运行。如果额外的可执行文件需要在用户会话中运行,则会话隔离可能会导致问题。 (很有可能你点击这个,就好像可执行文件试图使用打印驱动程序一样,它会遇到会话0下的问题。)
  2. IIS工作进程正在应用程序池标识下运行(如果不更改池设置,则不加载用户配置文件)。 由于可执行文件可能需要普通用户帐户,因此这种身份也会导致失败。

有太多的可执行文件无法在IIS下运行,所以你的不是新的或不常见的东西。

同时,当您在Visual Studio中点击F5时,您的应用程序默认运行在ASP.NET Development Server或IIS Express下,并且在您的用户会话中 切换到IIS时,在那里工作的任何东西都可能中断。 因此,您对IIS / Windows的理解程度并不令人惊讶。 每个专家都是初学者。

典型的解决方法是找到Microsoft或第三方供应商支持或推荐的替代方法。 请注意,免费和开源的东西通常是在没有会话0的情况下开发或测试的,并且它们可能导致比您想象的更多问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM