delphi 为什么C#中 Package 的COM EXE在Windows SysWOW64\System32目录中查找其配置文件?

nnvyjq4y  于 5个月前  发布在  C#
关注(0)|答案(1)|浏览(88)

我有一个旧的Pascal/ Delphi 应用程序(#1),它在Windows中注册。它是一个COM组件可执行文件。我还有另一个旧的 Delphi 应用程序(#2),它调用COM组件, Package 并声明了组件的类型,并完成了调用所需的所有魔法。它工作得很好。当然,这些都是32位应用程序。
我在x86目标(32位)控制台应用程序中引用了相同的COM可执行文件(#1),方法是右键单击项目并添加COM引用。我从Windows中注册的COM组件列表中选择了COM库(没有浏览到#1的exe)。
这添加了类型并 Package 了COM组件,并允许我从C#控制台应用程序调用它。但是,它失败了,因为注册的COM组件正在C:\Windows\SysWow64中查找其配置文件,而不是在COM组件的程序文件目录中查找(同样,COM组件是已安装的遗留应用程序的可执行文件,#1)。
我运行了进程监视器,看到另一个旧的 Delphi 应用程序(#2)调用COM组件,一切似乎都一样,除了当COM组件访问其配置文件时,它会在安装位置(#1的安装位置)的“c:\program files”中查找它。当我的应用程序调用它时,COM组件试图访问c:\windows\syswow64中的配置。在这种情况下,是什么导致工作目录的差异?

vmdwslir

vmdwslir1#

正如@Serg所暗示的:由于COM调用的结果,Windows正在启动一个新进程。原来我必须在进行COM调用之前手动启动该进程。一旦我这样做了,并为该进程设置了工作目录,一切都按预期工作。ShellExecute线索隐藏在 Delphi 应用程序意大利面条代码中,直到我明确地去寻找它,我才看到它。
最后,这还需要我执行相当多的与检测、重用和终止进程相关的内务处理。

相关问题