【问题标题】:Moving ASP Site with COM+ to IIS 8.5将带有 COM+ 的 ASP 站点迁移到 IIS 8.5
【发布时间】: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


【解决方案1】:

我找到了问题的答案:

http://support.microsoft.com/en-us/kb/184291

必须使用正确的默认打印机进入机器帐户,并从 HKCU 导出与端口、驱动程序和所选默认打印机相对应的注册表项。

然后编辑 .REG 文件以将 HKEY_CURRENT_USER 更改为 HKEY_USERS\.DEFAULT -- 然后双击每个以将新密钥上传到注册表中。这将设置机器默认打印机,COM+ 对象将获得这些信息,!问题解决了。

感谢那些帮助我进入正确的框架,从正确的角度看待这个问题的评论者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2016-09-27
    • 2014-12-07
    • 2016-03-15
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多