Inno Setup 製做jar轉EXE文件的安裝包 之權限、圖標、卸載菜單的問題

·怎麼給在開始菜單中增長卸載快捷方式?緩存

在相應節點下,添加如下代碼安全

[Setup]
Uninstallable=yes
UninstallDisplayName=卸載快捷方式的名字

[Icon]
Name: "{group}\卸載快捷方式的名字"; Filename: "{uninstallexe}"

**·怎麼自定義卸載圖標? **函數

(例中卸載圖標名字爲:uninstallico.ico)工具

下載一個UpdateIcon.dll放在同一個文件夾下 (JAR、腳本、圖標、這個DLL等相關文件都放同一文件夾下)ui

[Files]
;卸載圖標位置
Source: "D:\xx\uninstallico.ico"; Flags: solidbreak dontcopy
;卸載插件位置
Source: "D:\xxx\UpdateIcon.dll"; Flags: solidbreak dontcopy

[code]
//插件函數用法
//參數: 句柄(插件錯誤對話框的父句柄), exe文件完整路徑名稱, (exe文件中要替換的)圖標資源名稱, 圖標文件的完整路徑名稱, (exe中要替換的圖標資源所在)語系
//返回值: 成功 = True, 失敗 = False
function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;
external 'UpdateIcon@files:UpdateIcon.dll stdcall';
//替換卸載程序的圖標
function UpdateUninstIcon(const IcoFileName: String): Boolean;
begin
//  要替換圖標的exe文件路徑名稱留空,則插件會自動替換掉Inno卸載程序的圖標!其它參數相似!
  Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0); //替換卸載圖標
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
  sIcon: String;
begin
//注意: 替換卸載程序的圖標,必須是在卸載程序生成以前!
//建議安裝圖標與卸載圖標的格式與大小一致,不然可能會致使卸載程序出錯!
  if CurStep=ssInstall then
  begin
    sIcon:= ExpandConstant('{tmp}\uninstallico.ico'); //定義卸載圖標
//  ExtractTemporaryFile('UpdateIcon.dll');
    ExtractTemporaryFile(ExtractFileName(sIcon)); //釋放卸載圖標
//  要替換圖標的exe文件路徑名稱留空,則插件會自動替換掉Inno卸載程序的圖標!
    if UpdateUninstIcon(sIcon) then  //替換卸載圖標
          // MsgBox('卸載程序圖標 替換成功!', mbInformation, MB_OK)
  //  else MsgBox('卸載程序圖標 替換失敗!', mbError, MB_OK);
end;
end;

完了以後,若是你發現圖標仍是沒變,這多是WINDOWS緩存的問題,你把卸載文件放到別的文件夾下看看,若是圖標變了的話,那就說明替換成功。由於這個BUG,沒少浪費我時間……插件

·怎麼讓程序在啓動的時候自動請求管理員權限呢?code

使用ResHacker工具修改文件信息 用工具打開你要請求管理員的exe文件,使用搜索功能,查找「requestedExecutionLevel」orm

輸入圖片說明

把asInvoker 改爲requireAdministrator,以後點擊編譯腳本便可。 從新打開這個exe文件,若是你發現剛纔的值變成了requireAdministrator的話,那就說明更改爲功。圖片

若是這時候,運行程序仍是會提示權限不足,或者沒有任何反應的話,就是不提示請求權限的話。ip

那麼這極可能是電腦本地安全策略的設置問題。 在開始欄搜索 本地安全策略,打開它(家庭版的系統好像沒有這個功能) 選擇本地策略-安全選項,將用戶帳戶控制那幾個選項,改得和我同樣,重啓後再試試。 通常在這樣修改以後,程序就能自動請求權限。

輸入圖片說明

再補充一些技巧:

**怎麼取消安裝後的運行選項? **

(刪除腳本中的[run]代碼塊便可)

怎麼默認勾選建立桌面圖標

刪除 桌面圖標代碼後的 flags便可

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
相關文章
相關標籤/搜索