Process.Start在IIS中不起作用

wwtsj6pe  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(382)

我正尝试通过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();
            }
hgncfbus

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还是第三方工具进行打印,它都能正常工作。

相关问题