C#封装的32位COM EXE为何在SysWOW64目录查找配置文件?
COM组件工作目录差异的原因分析
核心差异根源:COM进程的启动方式与工作目录继承逻辑
- 旧Delphi应用#2的调用逻辑:Delphi应用直接调用COM组件时,若组件是同目录部署的EXE类型COM服务器,Delphi的COM激活逻辑会以自身的工作目录(即组件的安装目录)作为启动COM进程的工作目录,或者组件进程直接继承了宿主的工作目录,因此组件会到安装目录查找配置文件。
- C#控制台应用的调用逻辑:.NET通过互操作程序集激活进程外COM服务器时,默认不会显式指定COM进程的工作目录。Windows启动32位EXE类型的COM服务器时,若未指定工作目录,会默认使用
C:\Windows\SysWow64作为该进程的初始工作目录——这是64位系统下32位进程对应的系统目录,因此组件会在此路径下查找配置文件。
关键细节补充
#1是EXE格式的进程外COM服务器,这类组件的工作目录完全由启动它的逻辑决定:
- Delphi#2调用时,要么显式指定了组件EXE的启动目录,要么组件注册信息中包含了工作目录配置,Delphi的COM调用模块遵循了这个配置;
- .NET互操作激活进程外COM时,默认仅通过CLSID查找组件路径,启动时未传递工作目录参数,导致Windows采用系统默认的SysWow64作为组件进程的工作目录。
内容的提问来源于stack exchange,提问作者Sean Anderson
相关产品推荐
相关产品推荐

