文章目錄
- 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
添加點:
4.安裝到 C槽權限不足問題處理
Inno Setup打包的程式安裝完成後運作失敗,這個是因為權限不夠,打包的應用需要管理者權限,我這裡bat腳本添加環境變量時失敗了,以管理者權限添加才可以
解決方案:
步驟一:
在[Setup]節點添加 PrivilegesRequired=admin
步驟二:
進入Inno Setup安裝根目錄,找到檔案SetupLdr.e32,這是一個二進制配置檔案,需要用到ResHacker.exe這個工具修改(http://www.angusj.com/resourcehacker/)
找到,
修改為
步驟三:重新打包軟體
打成exe包出現有小盾牌的标志就說明添權重限成功啦。