Inno Setup:使用特定工作目录运行 regsvr32

Grh*_*rhm 4 dll installation regsvr32 inno-setup

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

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

现在,我正在通过一个[Run]条目来解决这个问题:

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

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

[Files]
Source: "{#mysrc}\Awkward.dll"; DestDir: "{app}"; Flags: regserver;  \
    WorkingDir: "{app}"
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法从特定目录注册/取消注册?

Mar*_*ryl 5

你不能。Inno Setupregsvr32.exe在内部运行(取消)注册 DLL 是从系统目录(通常是C:\Windows\System32)显式运行。


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

只需添加一个等效[UninstallRun]条目即可取消注册 DLL:

[UninstallRun]
Filename: "{sys}\regsvr32.exe"; Parameters: "/u /s Awkward.dll"; 
    WorkingDir: "{app}"; Flags: runhidden;
Run Code Online (Sandbox Code Playgroud)

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

另请参见动态链接库搜索顺序