我有一个用 Delphi 制作的 isapi *.dll,它可以根据 http 请求生成并返回 PDF。如果我在独立 exe 中构建它,代码可以正常工作,但在 isapi 上它会引发异常:“所选打印机无效”。
这似乎应用程序池标识问题。
通过谷歌搜索该问题,我发现了这个解释(https://stackoverflow.com/a/4619757/2936170):
这可能是由于 Vista 中引入的 Session 0 Isolation。服务始终在 Session 0 中运行,但在 XP 及更早版本中,第一个登录的用户也在 Session 0 中运行,从而允许服务访问该用户的桌面(从而允许“交互式”服务)和资源(如共享和打印机)。从 Vista 开始,用户不再在 Session 0 中运行,因此服务不再有权访问用户特定的资源。服务必须模拟它想要访问的用户帐户。
我也在 Windows 服务中构建了相同的代码,并以管理员权限安装,它可以运行!
问题是,如何配置 ISAPI 池以查看打印机?
答案1
回应我自己。
正确的池标识是本地系统