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)
有没有更简单的方法从特定目录注册/取消注册?
你不能。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。
另请参见动态链接库搜索顺序。