我正尝试通过Process.Start手动打印PDF,但在IIS中无法工作。我在Windows窗体应用程序中复制了相同的代码,并成功了。我已尝试将权限授予“网络服务”用户(我的应用程序池具有网络服务权限)。我还遵循了以下步骤:IIS7 does not start my Exe file by Process Start
string file = @"C:\test.pdf";
string printer = "TestPrinter";
string processFilename = Microsoft.Win32.Registry.LocalMachine
.OpenSubKey("Software")
.OpenSubKey("Microsoft")
.OpenSubKey("Windows")
.OpenSubKey("CurrentVersion")
.OpenSubKey("App Paths")
.OpenSubKey("AcroRd32.exe")
.GetValue(String.Empty).ToString();
var info = new ProcessStartInfo();
info.FileName = processFilename;
info.Arguments = string.Format("/h /t \"{0}\" \"{1}\"", file, printer);
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
info.UseShellExecute = false;
Process p = Process.Start(info);
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
int counter = 0;
while (!p.HasExited)
{
System.Threading.Thread.Sleep(1000);
counter += 1;
if (counter == 5) break;
}
if (!p.HasExited)
{
p.CloseMainWindow();
p.Kill();
}
1条答案
按热度按时间hgncfbus1#
嗯,我花了三天的时间,用了多种方法和工具来测试打印,最后才确认这不是编程问题,而是权限问题。当我在搜索提示时,这个问题似乎已经持续了十多年,而且总是发生在某些Web服务器设置上。所以,这里有一个解决方案,任何人谁偶然发现同样的情况,我有,并保存了三天的头痛。
设置:
1.在IIS服务器上运行Web应用程序或服务,并且您需要打印一些文档。
1.为此目的设置网络打印机,例如打印到办公室网络中的特定部门打印机。
1.当您使用开发计算机在localhost上进行测试时,打印工作正常。
1.当部署到实际的Web服务器时,打印会安静地停止,并且没有任何React。
原因是网络打印机是以\networkserver\printername的形式访问的,而Web应用程序帐户IIS_IUSER不是域帐户,因此无权访问任何网络服务器。
解决方案:
1.将IIS_IUSER帐户添加到域中,但这是一个非常糟糕的主意,因为您需要给予Web应用的Internet用户提供访问某些网络驱动器的权限。
1.使用TCP/IP添加打印机,而不是将其设置为网络驱动器。根据IP地址,默认情况下,所有本地用户(包括IIS_IUSER帐户)都可以访问打印机。
有了IP打印机,无论您使用ProcessStartInfo还是第三方工具进行打印,它都能正常工作。