2010-12-09 41 views
1

在Inno Setup的腳本[Run]部分,有一個標誌runasoriginaluser允許腳本來運行一個過程,因爲原來的用戶:安裝文件到原始用戶的我的文檔文件夾/ 7

產生的進程將通過 執行初始啓動 初始設置(即「UAC 對話框」憑據)的用戶的憑據(通常未升高) 。

對於{userdocs} shell文件夾常量是否有等效標誌或解決方法?

這顯然是創新安裝程序(和其他安裝程序,一般)內的已知限制,但我希望有人知道一個解決方法。從Inno Setup的幫助文件

摘錄:

「用戶」常數是指用戶在運行安裝程序的 輪廓。 該用戶通常與當前登錄用戶的 不同,所以請謹慎使用 「用戶」常量。

+0

你想在'我的文檔'文件夾中安裝哪些文件?我問,因爲這不是一個常用的安裝文件的位置。 – Bernard 2010-12-10 16:08:54

+0

在很多方面,這是一個非傳統的安裝。這是一個稅收系統,有50多個用戶使用。我們每年發送幾次程序更新(不需要向「我的文檔」文件夾寫入任何內容)。但是,每年兩次,我們需要發送更新的數據文件。偶爾我們會得到一位需要完整程序安裝的新收稅員(而不是更新)。過去,我們有三個不同的進程來處理這些場景(數據文件更新,程序更新和程序安裝)。我們正試圖通過一個Inno Setup「安裝」來完成這三項任務。 – mwolfe02 2010-12-10 16:52:40

回答

0

我想出了使用外部腳本來執行數據複製,並呼籲使用ExecAsOriginalUser功能在wpReadyNextButtonClick事件功能的腳本解決方法。

如果有人感興趣,我會提供更多詳情。

0

您的方法不正確。

有兩種正確的方法:

  1. 如果安裝程序安裝當前(授權)的唯一用戶的應用程序,不需要管理員權限,通過設置PrivilegesRequiredlowest

    [Setup] 
    PrivilegesRequired=lowest 
    

    然後,「用戶」常量將正確引用當前用戶的文件夾。

  2. 如果安裝程序爲所有用戶安裝應用程序,將某些文件放入一個特定用戶的文件夾是沒有意義的。所有用戶都需要這些文件,而不僅僅是一個。在這種情況下,推薦的方法是使用{commonappdata} constant(或類似文件)將文件安裝到「Common」文件夾。並讓應用程序在第一次運行時將文件複製到用戶文件夾。請參閱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

對於另一個類似的問題,請參見


有了這樣說,就可以了,因爲你已經發現自己,通過執行外部複製實用程序( copy,xcopy,robocopy)使用ExecAsOriginalUser function(或runasoriginaluser flag[Run]部分)。

ExecAsOriginalUser(
    'cmd.exe', '/c xcopy.exe "sourcefile" "%APPDATA%"', 
    '', SW_HIDE, ewWaitUntilTerminated, ResultCode); 

有關此方法的更多詳細信息,請參閱類似問題Inno Setup Creating registry key for logged in user (not admin user)

但是,如果安裝者開始立即擡起(與升起自身相反),上述操作將不起作用。無論如何,它在這種情況下無法工作。見How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'。出於這個原因,堅持上述方法。

相關問題