【问题标题】:Invoking a COM Server Dll on a 64-bit Windows Machine在 64 位 Windows 机器上调用 COM 服务器 Dll
【发布时间】:2010-08-25 15:43:57
【问题描述】:

我遇到了一些 64 位问题。这是独家新闻:

我有 32 位 COM exe(用 FoxPro 编写)。此 exe 调用 32 位 COM dll(也是用 FoxPro 编写的)。在 32 位 Windows 世界中,dll 放在C:/Windows/System32 目录下,注册到C:/Windows/System32/regsvr32.exe,一切正常。 exe可以启动,任何需要dll的进程都可以。

在 64 位世界中,情况就不同了。我尝试在运行Windows 7 x64 的机器上安装此应用程序,如下所示:

  • 我将 dll 放在C:/Windows/SysWOW64
  • 我使用C:/Windows/SysWow64/regsvr32.exe 注册了它,但我只能通过使用“以管理员身份运行”上下文菜单选项运行regsvr32 来使注册成功。

现在,当我尝试运行我的 exe 时,它​​无法调用 dll,除非使用“以管理员身份运行”选项启动我的 exe。不是很好。用户不应该只是为了运行一个简单的应用程序而成为管理员。

有人知道我如何在不需要“以管理员身份运行”选项的情况下使其工作吗??

谢谢!

-肯

【问题讨论】:

    标签: com dll registration system-administration win64


    【解决方案1】:

    老东西,以前可能从未在具有有限权限的用户帐户上尝试过。它可能会做一些禁止的事情,例如写入 HKLM\Software 中的注册表项或在 c:\windows 中创建文件。这些天都结束了。

    如果您不知道它可能会做什么,请使用 SysInternals 的 ProcMon 工具使用磁盘和注册表来观察它。尽管需要进行一些挖掘,但应该会弹出拒绝访问错误。如果您无法更改代码,那么您真的应该考虑终止该组件的生命周期。您可以破解它试图作为中间解决方案咀嚼的特定文件或注册表项的权限。确保不要对 c:\windows 目录做任何事情,这会导致比它解决的更多的麻烦。另一件事是,您的组件真的不属于私有 Windows 目录。

    【讨论】:

    • +1。 ProcMon 是找出这些东西究竟为什么不起作用的唯一可靠方法。
    • +1。谢谢,汉斯!我能够使用 ProcMon 找出问题所在。长话短说,DLL 试图在 SysWow64 目录中创建和访问具有写入权限的文件,这是只有管理员才能执行的操作。纠正了问题,我现在很好! -肯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2012-05-22
    • 2011-12-21
    • 1970-01-01
    • 2016-07-16
    • 2012-02-24
    • 2013-03-24
    相关资源
    最近更新 更多