天天看點

Windows下安裝及解除安裝程式可用的添加和删除目前路徑到環境變量的bat腳本以及如何和inno setup結合使用的執行個體

文章目錄

  • ​​1.安裝bat腳本-install.bat(将目前路徑添加到環境變量中)​​
  • ​​2.解除安裝bat腳本-uninstall.bat(搜尋目前路徑并删除)​​
  • ​​3.inno setup添加安裝和解除安裝時執行上述bat腳本​​
  • ​​4.安裝到 C槽權限不足問題處理​​
  • ​​5. 最後​​

1.安裝bat腳本-install.bat(将目前路徑添加到環境變量中)

可以和inno setup結合安裝完成後執行該腳本添加目前路徑到環境變量中:(errorlevel在管理者模式運作時會閃退)

cd /d %~dp0

::安裝注冊服務
start progressService.exe install

::添加目前工作目錄到環境變量
@echo off
set "thispath=%~dp0"
set "thispath=%thispath:~0,-1%"
echo 目前檔案所在的目錄的絕對路徑:%thispath%
set mypath=%path%
echo %mypath% > temp.txt

find "%thispath%" temp.txt
if %errorlevel% == 0 (
    echo path環境變量中 已經包含了 目前路徑%thispath%
    echo 程式傳回碼:%errorlevel%
) else (
    echo path環境變量中 沒有包含   目前路徑%thispath%
    echo 程式傳回碼:%errorlevel%
    setx /m "path" "%thispath%;%path%"
)    

del temp.txt

::啟動推拉流服務
start progressService.exe start

exit
::pause      

由于上述腳本安裝到C槽時運作會出現errorlevel調用閃退問題,是以最後做了妥協,不再判斷環境變量是否存在而直接添加,這種添加需要解除安裝時進行删除環境變量路徑:

cd /d %~dp0

::安裝注冊服務
start progressService.exe install


::添加目前工作目錄到環境變量
set "thispath=%~dp0"
echo 目前檔案所在的目錄的絕對路徑:%thispath%
::追加目前檔案所在目錄的路徑到path環境變量中
setx /m "path" "%thispath%;%path%"

::啟動服務
start progressService.exe start

timeout /T 3 /NOBREAK
exit
::pause      

需要管理者權限運作該bat腳本

​start progressService.exe install​

​是運作win_sw進行服務注冊的,注冊後可以開機運作及背景以服務形式運作。

2.解除安裝bat腳本-uninstall.bat(搜尋目前路徑并删除)

上述安裝腳本可以按照如下搜尋路徑方式修改,這個留下來給讀者擴充:

::停止并登出服務
cd /d %~dp0

start progressService.exe stop
start progressService.exe uninstall

set pathStr=%path%
set cm_ser=%~dp0
set nPath=hello

setlocal enableDelayedExpansion

:Loop
for /f "delims=; tokens=1,*" %%a in ("%pathStr%") do (
  if not "%%a"=="%cm_ser%" (
    if "!nPath!"=="hello" (
      set nPath="%%a"
    ) else (
      set nPath=%nPath%;"%%a"
    )
  )
  set pathStr=%%b
  goto Loop
)

set nPath=%nPath:"=%
echo %nPath%
setx Path "%nPath%" /m >nul
rem pause>nul

timeout /T 5 /NOBREAK

exit
::pause      

解除安裝時同步删除環境變量,否則多次安裝會添加多個路徑到環境變量

3.inno setup添加安裝和解除安裝時執行上述bat腳本

Inno setup及設定安裝完成後執行對應bat腳本(RUN和UninstallRun),并且增加了管理者權限運作,用于安裝和解除安裝時友善管理者權限調用對應的install.bat和uninstall.bat:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

...

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{27113DE0-961C-4343-B694-E49410E65D11}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}{#MyAppName}
DefaultGroupName={#MyAppName}
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
PrivilegesRequired=admin
OutputBaseFilename=xxx
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Run]
Filename: "{app}\install.bat"; Description: "{cm:LaunchProgram,安裝程式}";Flags: runhidden runasoriginaluser

[UninstallRun]
Filename: "{app}\uninstall.bat"; Flags: waituntilterminated

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "D:\code\CMPushFlowWebService*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files      

添加點:

Windows下安裝及解除安裝程式可用的添加和删除目前路徑到環境變量的bat腳本以及如何和inno setup結合使用的執行個體

4.安裝到 C槽權限不足問題處理

Inno Setup打包的程式安裝完成後運作失敗,這個是因為權限不夠,打包的應用需要管理者權限,我這裡bat腳本添加環境變量時失敗了,以管理者權限添加才可以

解決方案:

步驟一:

在[Setup]節點添加 PrivilegesRequired=admin

Windows下安裝及解除安裝程式可用的添加和删除目前路徑到環境變量的bat腳本以及如何和inno setup結合使用的執行個體

步驟二:

進入Inno Setup安裝根目錄,找到檔案SetupLdr.e32,這是一個二進制配置檔案,需要用到ResHacker.exe這個工具修改(http://www.angusj.com/resourcehacker/)

找到,

修改為

Windows下安裝及解除安裝程式可用的添加和删除目前路徑到環境變量的bat腳本以及如何和inno setup結合使用的執行個體

步驟三:重新打包軟體

打成exe包出現有小盾牌的标志就說明添權重限成功啦。

5. 最後

繼續閱讀