我有一个类似于Inno Setup的问题:验证是否已安装.NET 4.0,但它似乎略有不同.
[Files]
Source: "dependencies\dotNetFx40_Full_x86_x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall; Check: FrameworkIsNotInstalled
Source: "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MySql.Data\v4.0_6.5.4.0__c5687fc88969c44d\MySql.Data.dll"; DestDir: "{app}\lib"; StrongAssemblyName: "MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, ProcessorArchitecture=MSIL"; Flags: "gacinstall sharedfile uninsnosharedfileprompt"
[Run]
Filename: {tmp}\dotNetFx40_Full_x86_x64.exe; Description: Install Microsoft .NET Framework 4.0; Parameters: /q /norestart; Check: FrameworkIsNotInstalled
[code]
function FrameworkIsNotInstalled: Boolean;
begin
Result := not RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Microsoft\.NETFramework\policy\v4.0');
end;
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试向GAC注册文件.不幸的是,在某些机器上可能没有安装.NET框架.所以我需要先安装它.无论如何,在我尝试注册文件之前,我是否可以强制安装.NET运行时?
我想以静默方式调用多个.msi文件,如果有任何失败,则暂停整个安装.
是否可以从[run]部分调用msiexec.exe的返回码?
目前我只能在Windows事件查看器中看到错误消息.
我有一个Inno安装程序安装执行一些耗时的'AfterInstall'操作.执行此操作时,安装GUI完全冻结(似乎未处理主事件循环).这不是一个愉快的最终用户体验,所以也许这种操作可能不会冻结GUI?喜欢在单独的线程中执行它还是定期调用类似的东西handleGuiEventLoop()?