2010-08-25 117 views
1

我有一些64位问题。这里的瓢:在64位Windows机器上调用COM服务器DLL

我有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像这样的机器上这个应用程序:

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

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

有没有人知道我如何得到这个工作,而不需要“以管理员身份运行”选项?

谢谢!

-Ken

回答

4

旧的东西,它可能是从来没有尝试过与之前受限权限的用户帐户。它可能会做一些事情,比如写入HKLM \ Software中的注册表项或在c:\ windows中创建一个文件。这些日子已经结束并完成了。

如果你不知道它可能做了什么,那么使用SysInternals的ProcMon工具来观察它使用磁盘和注册表。访问被拒绝的错误应该弹出,尽管需要一点挖掘。如果你不能改变代码,那么你真的应该考虑这个组件的报废。您可以破解它试图将其作为中介解决方案的特定文件或注册表项的权限。一定不要对c:\ windows目录做任何事情,这会导致比解决问题更多的麻烦。这是另一回事,你的组件真的不属于一个私人的Windows目录。

+0

+1。 ProcMon是找出为什么这些东西不起作用的唯一可靠方法。 – sharptooth 2010-08-26 05:20:37

+0

+1。谢谢,汉斯!我能够使用ProcMon追踪这个问题。长话短说,DLL试图用写权限来创建和访问SysWow64目录中的文件,这是只有管理员才能做到的。 纠正了这个问题,我现在很好! -Ken – Ken 2010-08-26 19:46:46