我无法从IIS成功调用Process.Start("DocToPDF.exe", "file.docx file.pdf")
。
这些都不起作用。 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;
}
答案 0 :(得分:3)
从IIS网站/应用程序调用任何进程几乎总是一个可怕的想法。
有太多的可执行文件无法在IIS下运行,所以你的不是新的或不常见的。
与此同时,当您在Visual Studio中点击F5时,您的应用程序默认运行在ASP.NET Development Server或IIS Express下,而位于您的用户会话中。切换到IIS时,在那里工作的任何东西都可能中断。因此,您对IIS / Windows的理解程度并不令人惊讶。每个专家都是初学者。
典型的解决方法是找到Microsoft或第三方供应商支持或推荐的替代方法。请注意,免费和开源的东西通常是在没有会话0的情况下开发或测试的,并且它们可能导致比您想象的更多问题。