国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

有關(guān) Inno Setup 的實踐:檢查并安裝依賴,運行時退出安裝或卸載

這篇具有很好參考價值的文章主要介紹了有關(guān) Inno Setup 的實踐:檢查并安裝依賴,運行時退出安裝或卸載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

如題,檢測 Microsoft Visual C++ 2015 Redistributable (x64) 依賴并安裝,若程序安裝或卸載時應(yīng)用運行中將檢測并退出文章來源地址http://www.zghlxwxcb.cn/news/detail-821324.html

所需依賴

  • Microsoft Visual C++ 2015 Redistributable (x64) Microsoft 官網(wǎng)下載
  • psvince.dll Github 下載

編輯 iss 文件

[Files]
...
Source: "psvince_path\psvince.dll"; DestDir: "{app}"

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent; BeforeInstall: IsAllDependciesInstalled

[Code]
// 通過注冊表檢測 VC2015+ 是否安裝
function IsVCServiceInstalled(): Boolean;
var
  Names: TArrayOfString;
  I: Integer;
  RootKey: Integer;
  Subkey: String; 
begin
  Result := false;
  if IsWin64 then
  begin
    RootKey := HKLM64;
  end
  else
  begin
    RootKey := HKLM32;
  end;
  if RegGetSubKeyNames(RootKey, 'SOFTWARE\Classes\Installer\Dependencies', Names) then
  begin
    for I := 0 to GetArrayLength(Names)-1 do
    begin
      SubKey := Names[I];
      if Pos('VC,redist.x64,amd64,14', Subkey) > 0 then
        begin
          Result := true;  
          Break;
        end
      else
        begin
          Result := false;
        end
    end
  end
end;

// 退出安裝程序
procedure ExitProcess(uExitCode: Integer);
  external 'ExitProcess@kernel32.dll stdcall';

// 通過注冊表判斷所需服務(wù)是否安裝
procedure IsAllDependciesInstalled;
var
  VCServiceInstalled: Boolean;
  MissingService: String;
  ResultCode: Integer;
begin
  MissingService := '';
  VCServiceInstalled := IsVCServiceInstalled();
  if not VCServiceInstalled then
    MissingService := MissingService + ExpandConstant('{#StringChange(VCServiceName, '&', '&&')}') + #13#10; // #13#10 代表換行

  if not VCServiceInstalled then
  begin
    if MsgBox(FmtMessage(CustomMessage('MissingDependcies'), [MissingService]), mbConfirmation, MB_OKCANCEL) = IDOK then
    begin
      if not VCServiceInstalled then
        Exec(ExpandConstant('{app}\{#VCServiceExeName}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
        // 如果是 .msi 形式安裝
        // ShellExec('', 'msiexec.exe', ExpandConstant('/I "{app}\{#VCServiceExeName}" /qb'), '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
    end 
  end
end;

// 檢測程序進程是否啟動
function IsModuleLoaded2(modulename: String ):  Boolean;
external 'IsModuleLoaded2@files:psvince.dll stdcall setuponly';

// 判斷進程是否存在
function IsAppRunning(const FileName : string): Boolean;
var
    FSWbemLocator: Variant;
    FWMIService   : Variant;
    FWbemObjectSet: Variant;
begin
    Result := false;
    try
      FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
      FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
      FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name="%s"',[FileName]));
      Result := (FWbemObjectSet.Count > 0);
      FWbemObjectSet := Unassigned;
      FWMIService := Unassigned;
      FSWbemLocator := Unassigned;
    except
      if (IsModuleLoaded2(FileName)) then
        begin
          Result := false;
        end
      else
        begin
          Result := true;
        end
      end;
end;

// 通過名稱終結(jié)進程
procedure TaskKillProcessByName(AppName: String);
var
  WbemLocator : Variant;
  WMIService   : Variant;
  WbemObjectSet: Variant;
  WbemObject   : Variant;
begin;
  WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  WMIService := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
  WbemObjectSet := WMIService.ExecQuery('SELECT * FROM Win32_Process Where Name="' + AppName + '"');
  if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then
  begin
    WbemObject := WbemObjectSet.ItemIndex(0);
    if not VarIsNull(WbemObject) then
    begin
      WbemObject.Terminate();
      WbemObject := Unassigned;
    end;
  end;
end;

// 安裝的時候判斷進程是否存在
function InitializeSetup(): Boolean;
begin
 Result := IsAppRunning('{#MyAppExeName}');
  if Result then
  begin
    MsgBox(ExpandConstant('{cm:SetupAppRunningError,{#StringChange(MyAppName, '&', '&&')}}'), mbError, MB_OK); 
    result:=false;
  end
else
    begin
      result := true;
    end;
end;

//;卸載的時候判斷進程是否存在
function InitializeUninstall(): Boolean;
begin
 Result := IsAppRunning('{#MyAppExeName}');
  if Result then
  begin
    MsgBox(ExpandConstant('{cm:UninstallAppRunningError,{#StringChange(MyAppName, '&', '&&')}}'), mbError, MB_OK); 
    result:=false;
  end
else
    begin
      result := true;
    end;
end;  





到了這里,關(guān)于有關(guān) Inno Setup 的實踐:檢查并安裝依賴,運行時退出安裝或卸載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 將Python打包為exe+inno setup將exe程序封裝成向?qū)О惭b程序

    將Python打包為exe+inno setup將exe程序封裝成向?qū)О惭b程序

    為什么要打包? Python腳本不能在沒有安裝Python的機器上運行。如果寫了一個腳本,想分享給其他人使用,可她電腦又沒有裝Python。如果將腳本打包成exe文件,即使她的電腦上沒有安裝Python解釋器,這個exe程序也能在上面運行。 1、在pycharm中安裝pyinstaller 2、進入你所在的文件

    2024年01月25日
    瀏覽(20)
  • Inno Setup打包教程(將已經(jīng)打包為exe文件的java項目程序,打包為可安裝的Windows程序以及最新版inno中文漢化)

    Inno Setup打包教程(將已經(jīng)打包為exe文件的java項目程序,打包為可安裝的Windows程序以及最新版inno中文漢化)

    提示:將已經(jīng)打包為exe文件的java項目程序,打包為可安裝的程序 文章目錄 文章目錄 一、Inno Setup是什么? 二、安裝教程 1.下載安裝 2.Inno Setup的簡單使用和打包教程 3.Inno Setup的漢化 總結(jié) Inno Setup 是一個免費的 Windows 安裝程序制作軟件。第一次發(fā)表是在 1997 年,現(xiàn)在已經(jīng)更新

    2024年02月13日
    瀏覽(26)
  • Inno Setup簡介

    Inno Setup簡介

    簡易打包: 選擇使用向?qū)?chuàng)建一個新的腳本 填好圖中的安裝包名稱、安裝版本、安裝包發(fā)布者、安裝包的相關(guān)網(wǎng)站,安裝包名稱和版本是必填的,剩下那兩個可以選填。 第一個是應(yīng)用程序目標(biāo)基本文件夾可以選擇,第二個是應(yīng)用程序文件夾名稱,就是安裝時新建的安裝目錄

    2024年02月09日
    瀏覽(20)
  • Inno Setup打包winform、wpf程序可判斷VC++和.net環(huán)境

    Inno Setup打包winform、wpf程序可判斷VC++和.net環(huán)境

    官網(wǎng)鏈接: link 1、新建打包文件 2、填寫 應(yīng)用名稱、版本號、公司名稱、公司官網(wǎng) 3、選擇安裝路徑 Custom是指定默認(rèn)路徑、Program Files folder是默認(rèn)C盤根目錄 4、選擇程序啟動exe文件 以及Addfolder選擇全部運行文件 5、選擇安裝前顯示文字 、安裝中、安裝后 這里我只選擇了安裝前

    2024年02月16日
    瀏覽(20)
  • Inno Setup 結(jié)合exe4j打包 Java 程序為 EXE 文件

    Inno Setup 結(jié)合exe4j打包 Java 程序為 EXE 文件

    鏈接:https://pan.baidu.com/s/1l6qYRi6unjLL_4VVYpsShg 提取碼:bzd6 文件內(nèi)容: exe4j 是一個商業(yè)軟件,旨在將 Java 程序打包為本地可執(zhí)行文件。它提供了豐富的功能,包括創(chuàng)建 Windows 可執(zhí)行文件、安裝程序、服務(wù)等。使用 exe4j,您可以將 Java 應(yīng)用程序打包成一個獨立的 EXE 文件,無需安

    2024年02月09日
    瀏覽(27)
  • stable diffusion 運行(setup.py安裝?直接運行?)

    在我python虛擬環(huán)境有所有包的情況下,我不需要用setup.py把這個ldm庫安裝到我的python虛擬環(huán)境,秩序要直接運行scripts/txt2img.py即可 有三種方法 1、直接把txt2img.py從scripts目錄移動到根目錄,然后運行即可 2、不用移動,但不能直接使用 python scripts/txt2img.py ,因為這個命令把txt

    2024年02月16日
    瀏覽(17)
  • npm i 安裝的依賴項目,運行正常,換成pnpm i安裝的依賴運行報錯

    npm i 安裝的依賴項目,運行正常,換成pnpm i安裝的依賴運行報錯

    報錯信息大概如下 ? Failed to compile with 15 errors 00:47:21 These dependencies were not found: * codemirror/addon/dialog/dialog.css in ./node_modules/.pnpm/cache-loader@4.1.0_webpack@4.47.0/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/.pnpm/babel-loader@8.3.0_@babel+core@7.23.2_webpack@4.47.0/node_modules/babel-loader/lib!./node_

    2024年02月08日
    瀏覽(26)
  • 有關(guān)錢包相關(guān)開發(fā)的庫和依賴

    Trezor 錢包 GitHub 組織:https://github.com/trezor 說明:Trezor 是一款硬件加密貨幣錢包,它的團隊開發(fā)了與助記詞相關(guān)的許多工具和庫。 Electrum 錢包 GitHub 倉庫:https://github.com/spesmilo/electrum 說明:Electrum 是一款比特幣輕量級錢包,它的團隊也開發(fā)了與助記詞相關(guān)的工具和庫。 BIP4

    2024年04月29日
    瀏覽(14)
  • PNPM 批量檢查和更新項目依賴

    PNPM 批量檢查和更新項目依賴

    ?? 作者主頁: 有來技術(shù) ?? 開源項目: youlai-mall ?? vue3-element-admin ?? youlai-boot ?? 倉庫主頁: Gitee ?? Github ?? GitCode ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請糾正! 前端項目的依賴管理是確保應(yīng)用穩(wěn)定運行和安全性的關(guān)鍵。隨著依賴數(shù)量的增加和更新頻率的加快

    2024年02月21日
    瀏覽(23)
  • 鴻蒙開發(fā):OH編譯構(gòu)建分析 - 依賴關(guān)系檢查

    背景 OHOS的編譯構(gòu)建系統(tǒng)是由sh腳本(或bat腳本),python腳本,Gn和Ninja工具組成的編譯構(gòu)建框架??傮w編譯構(gòu)建流程是根據(jù)產(chǎn)品配置,生成具體依賴關(guān)系,然后使用Gn配置構(gòu)建目標(biāo),通過Gn生成ninja文件,然后執(zhí)行ninja生成二進制,最后打包生成鏡像的過程。本篇主要涉及配置文

    2024年01月17日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包