diff --git a/setup.iss b/setup.iss index 9c0fa34..eef8106 100644 --- a/setup.iss +++ b/setup.iss @@ -46,3 +46,45 @@ Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; \ Filename: "{app}\{#AppExeName}"; Description: "{cm:LaunchProgram,{#AppName}}"; \ Flags: nowait postinstall skipifsilent +Filename: "{app}\everything\Everything64.exe"; \ + Parameters: "-install-service"; \ + WorkingDir: "{app}\everything"; \ + Flags: runhidden waituntilterminated; \ + Check: NeedInstallEverythingService + +[Code] +{ 使用 WMI 检测服务是否存在 } +function ServiceExistsByNameOrDisplay(const NameOrDisplay: string): Boolean; +var + Locator, Services, ResultSet: Variant; + Query: string; +begin + Result := False; + try + Locator := CreateOleObject('WbemScripting.SWbemLocator'); + Services := Locator.ConnectServer('.', 'root\CIMV2'); + + { 同时按 ServiceName 和 DisplayName 查询,任一匹配即认为存在 } + Query := + 'SELECT Name FROM Win32_Service ' + + 'WHERE Name="' + NameOrDisplay + '" OR DisplayName="' + NameOrDisplay + '"'; + + ResultSet := Services.ExecQuery(Query); + Result := (ResultSet.Count > 0); + except + { 如果 WMI 不可用或异常,返回 False(让后续安装服务的逻辑照常进行) } + Result := False; + end; +end; + + +function EverythingServiceInstalled(): Boolean; +begin + Result := + ServiceExistsByNameOrDisplay('Everything (1.5a)'); +end; + +function NeedInstallEverythingService(): Boolean; +begin + Result := not EverythingServiceInstalled(); +end; \ No newline at end of file