【发布时间】:2015-03-13 15:13:08
【问题描述】:
拥有一个较旧的经典 ASP 站点,其中包含三个 COM+ 进程,站点可以访问这些进程来创建 PDF 文件报告。
从 IIS 6/Server 2003 迁移到 IIS 8.5/server 2012 R2。两个操作系统都是 64 位的。到目前为止一切正常,除了 COM+ 容器不断返回“没有指定默认打印机”错误。
COM+ 的进程标识都设置为本地用户,我为其设置了默认打印机(两者都是 Bullzip PDF)。它们也在与 IIS 不同的进程中运行。当我在任务管理器中看到 COM+ 运行时,它们都会在其中显示该用户。 COM+ 是传统的 32 位(用 Delphi 编写)并且已正确注册,等等。
该服务的 IIS 标识在 2003(它工作的地方)和 2012R2)都设置为本地系统,但它没有。
并不是说它应该有所作为,但旧的 2003 虚拟机在 Amazon EC2 上,而新的 2012R2 虚拟机在 Azure 上。
我试图弄清楚为什么 COM+ 没有选择为进程身份帐户设置的默认打印机。两台机器之间的所有 COM+ 设置都完全相同,除了帐户已更改名称,但都是设置了默认打印机的机器管理员。
我错过了什么?
【问题讨论】:
-
“COM+ 是传统的 32 位(用 Delphi 编写)并且已正确注册,等等。” 您认为正确注册的内容是什么?例如,您是否使用过 32 位版本的
odbcad32.exe来注册 DLL? -
嗨。您列出了 ODBC 连接器,但我注册了 regsvr32,这是您将 COM 组件/OCX 注册到操作系统的方式。因此组件执行但无法获得默认打印机。仅供参考,组件不使用 ODBC 访问 SQL Server。
-
你完全正确的约翰,我的意思是
regsvr32.exe(对odbcad32.exe的引用完全是红鲱鱼)。我今天脑子里装了 ODBC。我的意思是您是否使用位于%systemroot%\SysWOW64目录中的 32 位版本进行注册。 64 位服务器上的默认值是%systemroot%\system32目录,它将向 64 位注册表而不是 32 位子系统注册表注册 DLL。 -
我想通了! support.microsoft.com/en-us/kb/184291您必须将默认打印机设置到注册表中的 HKEY_USERS\.DEFAULT Fixed 下。
-
很高兴您找到了解决方案。您能否将其发布为答案并接受它?这样别人就能找到吗? :-)
标签: delphi iis asp-classic com+ windows-server-2012-r2