2016-11-15 207 views
1

我嘗試使用Inno安裝程序創建安裝程序,當我遇到此問題時,一切正在安裝,但註冊表項沒有安裝在當前用戶中。我發現這是很有幫助的話題(非常感謝!):
Inno Setup Creating registry key for logged in user (not admin user)Inno設置爲登錄用戶使用{localappdata}

這解決了部分添加註冊表項,像這樣:

[Run] 
Filename: reg.exe; \ 
    Parameters: "ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""{localappdata}\temp\\"""; \ 
    Flags: runasoriginaluser runhidden 

我的問題:
{localappdata}指管理員用戶(管理員)不是本地用戶(測試):

它補充說: HKCU \ SOFTWARE \ myprin之三OUTPUTFILE REG_SZ C:\用戶\ ADMIN \應用程序數據\本地\ TEMP \

是必需的: HKCU \ SOFTWARE \ myprinter OUTPUTFILE REG_SZ C:\用戶\測試\應用程序數據\本地\ TEMP \

該軟件不起作用,因爲它不允許使用管理員臨時(當然)

雖然根據在線幫助,它應該爲開始設置的用戶工作,它似乎沒有,對我來說。 (具有或不具有postinstall標誌)

runasoriginaluser

僅在[運行]部分有效。如果指定了此標誌,並且系統運行的是Windows Vista或更高版本,則生成的進程將使用 最初開始安裝的用戶(通常未提升的)憑證執行 (即,「UAC之前對話」憑證)。

這是使用postinstall標誌時的默認行爲。

如果用戶通過右鍵單擊它的EXE文件並選擇「以管理員身份運行」 啓動安裝程序,那麼這個標誌,不幸的是,不會有任何 效果,因爲安裝程序沒有機會運行帶有 原有的任何代碼用戶憑證。如果安裝程序從 已啓動的進程啓動,則情況也是如此。但請注意,這不是Inno 安裝程序特定的限制;在這種情況下,基於Windows Installer的安裝程序不能返回到原始用戶憑證。

該標誌不能與runascurrentuser標誌組合。

注意:在運行Inno Setup的:5.5.9(一)和Windows 10

+0

不要使用創新安裝的ANSI版本,使用Unicode版本。 –

回答

0

首先,你的做法是不正確的。

有兩種正確的方法:

  1. 如果安裝程序安裝當前(授權)的唯一用戶的應用程序,不需要管理員權限。使用PrivilegesRequired=lowest

    PrivilegesRequired=lowest 
    

    然後{localappdata}constant(以及類似)將正確指當前用戶的文件夾。

  2. 如果安裝程序安裝所有用戶的應用程序,它沒有任何意義更新一個特定用戶的註冊表。所有用戶都需要註冊表設置,而不僅僅是一個。在這種情況下,推薦的方法是在HKLM中設置常用註冊表設置(或將設置存儲到某個常用文件中)。並讓應用程序在第一次運行時將設置複製到用戶註冊表配置單元。請參閱How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'

您還可以允許用戶在這兩種方法之間進行選擇。
請參閱Make Inno Setup installer request privileges elevation only when needed

對於類似的問題,請參見


反正{localappdata}常數由Inno Setup的程序解決,Administrator帳戶上下文中運行。解決方案絕不受runasoriginaluser標誌的影響。

但是你可以使用「原始用戶」範圍內的等效%LOCALAPPDATA%環境變量,它會被執行的過程中加以解決,即。

爲了讓環境變量的分辨率,你需要通過cmd.exe要執行的命令。

[Run] 
Filename: {cmd}; \ 
    Parameters: "/C reg.exe ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""%LOCALAPPDATA%\temp\\"""; \ 
    Flags: runasoriginaluser runhidden 

對於另一種方法,請參閱Inno Setup - Access unprivileged account folders from installer that requires privileges

+0

嗨馬丁,非常感謝您的回覆。 1.不可能,因爲我需要開始安裝過程。 2.我的程序不是第一個被執行的程序。它只有在註冊表項設置正確時才能正常運行。 建議的解決方案確實有效!非常感謝:-) – eelcos

+0

1.如果單個(授權)用戶在安裝應用程序而已,你可以把它安裝到用戶的個人資料。這樣,您不需要安裝的管理權限。 2.這是設計應用程序時應該考慮的事情。 –