Inno Setup:运行 具有特定工作目录的 regsvr32

Inno Setup: Run regsvr32 with a specific working directory

我正在尝试将一些 DLL 注册为我的安装程序的一部分。我正在使用 regserver 标志,它对大多数 DLL 都非常有效。但是,一个 DLL 无法注册。它会尝试加载其他 DLL,如果在当前目录中找不到它们,则会失败。如果 regsvr32 是 运行 从 {app} 目录手动注册,它会干净地注册。

有什么方法可以设置 regserver 标志的工作目录吗?还是整个安装程序?

现在,我正在通过 [Run] 条目解决它:

[Run]
;Register components that are "special"
Filename: "{sys}\Regsvr32.exe"; Parameters: "/s Awkward.dll"; WorkingDir: "{app}"; StatusMsg: "Registering components ... "; Flags: runhidden; 

但这并不理想,因为我怀疑我还应该添加一个 [UninstallRun] 部分并添加一个 unregester 命令。我希望我能做到:

[Files]
Source: "{#mysrc}\Awkward.dll"; DestDir: "{app}"; Flags: regserver; WorkingDir: "{app}"

是否有更简单的方法从特定目录 register/unregister?

你不能。 regsvr32.exe Inno Setup 运行 在内部(取消)注册 DLL 是明确地 运行 来自系统目录(通常是 C:\Windows\System32)。


您的解决方法是最好的方法。

只需添加等效的 [UninstallRun] 条目即可注销 DLL:

[UninstallRun]
Filename: "{sys}\regsvr32.exe"; Parameters: "/u /s Awkward.dll"; WorkingDir: "{app}"; \
    Flags: runhidden;

或者更好的是,修复 DLL 使其不依赖于工作目录。您可以为 LoadLibraryEx 使用 LOAD_WITH_ALTERED_SEARCH_PATH 标志。

另见 Dynamic-Link Library Search Order