2012-08-02 128 views
2

我通過InnoIDE中的嚮導創建了一個非常簡單的inno腳本。但是,部署的可執行文件可以由普通用戶運行。我如何強制用戶必須通過腳本以管理員身份運行它?如何使用Inno Setup更改可執行文件權限?

[Setup] 
AppId={{03E6645E-2C53-4E90-967B-D0833A8EBDAF} 
AppName={#MyAppName} 
AppVersion={#MyAppVersion} 
AppPublisher={#MyAppPublisher} 
AppPublisherURL={#MyAppURL} 
AppSupportURL={#MyAppURL} 
AppUpdatesURL={#MyAppURL} 
DefaultDirName={pf}\{#MyAppName} 
DefaultGroupName={#MyAppName} 
OutputBaseFilename=setup 
Compression=lzma 
SolidCompression=yes 
PrivilegesRequired=admin 

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

[Tasks] 
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "    {cm:AdditionalIcons}"; Flags: unchecked 

[Files] 
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: {app}; Flags: ignoreversion; Permissions: admins-readexec; 
; NOTE: Don't use "Flags: ignoreversion" on any shared system files 

[Icons] 
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 

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

'我如何強制用戶必須通過腳本以管理員身份運行它 - 我認爲這就是「PrivilegesRequired = admin」所做的。 – JimmyPena 2012-08-08 19:14:15

+0

@Jimmy,確實如此,但對於設置。 OP希望爲其創建安裝程序的應用程序。 – TLama 2012-08-10 15:48:48

+1

@TLama明白了,謝謝。 – JimmyPena 2012-08-10 17:03:28

回答

3

您不能使用Inno更改應用程序的權限或清單。

要使您的應用程序要求管理員權限,您需要向其添加適當的清單。這對於每種不同的編程語言都是不同的,但many related questions已經被詢問和回答。

+0

等等,我認爲清單是通用的XML *文件*,並不是說它依賴於編程語言。如果這是正確的,你會發現一些工具可以修改這個XML *文件*(例如可能是['這個工具'](http://msdn.microsoft.com/en-us/library/acz3y3te(v = vs。 110).aspx)),那麼您可以在部署的應用程序實際打包到設置中之前從腳本運行該工具(I♥預處理器:-) – TLama 2012-08-02 09:58:11

+0

@ user1412803,好吧,看起來您認爲這是不可能的。沒關係。 – TLama 2012-08-02 11:18:19

+0

@TLama清單是,如何添加它不同基於語言/編譯器雖然。 VB6要求您在編譯之前將其添加到res文件中。 .NET應用程序(在VS2005中)需要一個調用mt.exe的後編譯步驟。 VS2008 +有一個項目選項來包含一個清單(iirc)。 – Deanna 2012-08-02 14:11:47

0

簡單的辦法來使您的應用程序要求管理員權限:

您的可執行文件中添加註冊表項,此值:

[Registry] 
Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: string; ValueName: "{app}\{#MyAppExeName}"; ValueData: "RUNASADMIN"; Flags: uninsdeletevalue 
我通常喜歡使用上面的代碼

+0

我無法看到比添加清單更容易的事情。爲什麼在這個世界上,人們喜歡將他們的程序設置爲以兼容模式*從頭開始運行*?避免這樣做。添加清單是正確的方法。 – TLama 2015-08-31 07:23:09

+0

它更容易,因爲該可執行文件不是我的(我不是程序員),我沒有智能如何編碼和添加清單文件將來可能會導致任何問題,我只是重新包裝它,以便更好的安裝。 – user3733975 2015-08-31 07:44:51

+0

是的,如果MS決定將這些註冊表項移到其他地方,肯定會爲您保存未來的計劃。這並不容易。期。如果應用程序。是你的(這是爲這個問題假設),添加一個清單(如果你的應用程序真的需要它)。許多IDE對此有着豐富的支持。如果你在偷別人的應用程序。重新包裝,使用外部清單(如果你真的需要它)。 – TLama 2015-08-31 08:01:30