gpt4 book ai didi

c# - 进程启动 IIS 服务器

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:23 26 4
gpt4 key购买 nike

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

  • 我已尝试允许从 IIS 管理服务进行桌面交互;
  • 我已尝试为包含 DocToPDF.exe 的目录向 DefaultAppPool 授予完全控制权限

这些都不起作用。 DocToPDF.exe 以代码退出:1(我将退出代码写入文件...)。当我以 Debug模式 (F5) 运行网站时,程序退出并显示代码:0,一切正常。它在 Debug模式下运行良好。我的猜测是它与 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 及其工作进程在 session 0 中运行。如果额外的可执行文件需要在用户 session 中运行, session 隔离可能会导致问题。 (您很可能会遇到这个问题,就好像可执行文件试图使用打印驱动程序一样,它会在 session 0 下遇到问题。)
  2. IIS 工作进程在应用程序池标识下运行(如果您不更改池设置,则不会加载用户配置文件)。这种身份也可能导致失败,因为可执行文件可能需要普通用户帐户。

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

与此同时,当您在 Visual Studio 中按 F5 键时,您的应用默认在 ASP.NET Development Server 或 IIS Express 下运行,并且在您的用户 session 中。切换到 IIS 时,任何工作都可能中断。因此,您对 IIS/Windows 的了解如此之少,请不要感到惊讶。每个专家都是初学者。

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

关于c# - 进程启动 IIS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27940617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com