簡體   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