2013-10-28 65 views
0

在我們的安裝包中,用戶(不一定是管理員)可以選擇爲當前用戶(CU)或所有用戶(AU)安裝我們的應用程序。當選擇CU時,自定義動作(即VB腳本)在HKCU註冊表中寫入某些內容。另一方面,當選擇AU(對於管理員)時,相同的腳本將相同的內容寫入HKLM。特權訪問點需要

這在WinXP及以下版本中都很好。但是對於Win7來說,這是由於UAC造成的一個問題 - 正如你所想象的那樣。用戶始終可以在EXE文件上執行右鍵單擊 - >以管理員的身份運行或暫時關閉UAC,但這不能滿足原來的要求,即普通用戶不需要提升即可運行安裝程序。

我已經試過的解決方法是設置需要管理員權限項目屬性爲。但如上所述,這不適用於普通用戶。

有沒有辦法請求海拔點播?我在想,如果用戶選擇AU,那麼在執行安裝程序之前,我不會在雙擊程序時詢問高程。請參閱我在以下代碼段中的評論:

Sub AddRegistryKey(key, value) 

    Dim WshShell 
    Set WshShell = CreateObject("WScript.Shell") 

    If Session.Property("ALLUSERS") <> "1" Then 
     ' Can I request for elevation at this point? 
     Session.Property("PathToRegistryKeys") = Session.Property("PathToRegistryKeysUser") ' HKCU 
    Else 
     Session.Property("PathToRegistryKeys") = Session.Property("PathToRegistryKeysAll") ' HKLM 
    End If 

    WshShell.RegWrite Session.Property("PathToRegistryKeys")&Session.Property("ProductCode")&"\"&key&"\", value, "REG_SZ" 

End Sub 

回答

2

有一種方法可以實現此目的,但它在Windows 7上引入,因此它不適用於Windows Vista。它與ALLUSERS有關,但也需要指定新的屬性MSIINSTALLPERUSER。如果啓用正確,MSIINSTALLPERUSER將覆蓋Word Count summary property的位3,從而允許按用戶安裝而不需要提升。從InstallShield 2010開始,InstallShield爲此提供了支持(如果您使用的是舊版本,請檢查發行說明的確定性)。

不支持此屬性,就像在Windows Vista上的情況一樣,您可以要求提升,也不要在MSI內提升。這反過來需要啓動具有提升權限的每臺計算機安裝(您所描述的啓動解決方法),並且將在「肩上」高程中失去未提升用戶的跟蹤。

參見:How can the behavior of my .msi on Windows Vista and Seven be so weird?

+0

感謝您的鏈接。這看起來像是我需要的一個可行的解決方案。事實上,我能夠使它部分工作。但是,我試圖在自定義操作(vbscript)中設置'MSIINSTALLPERUSER',這似乎是錯誤的位置。有沒有應該設置的具體位置?我需要在運行卸載過程中的特權訪問... :( –

+0

每用戶通過'MSIINSTALLPERUSER'安裝不提升,期。所以如果你需要擡高,你不能走這條路。我建議重新訪問您的要求,爲提升沒有升降是一個明顯的衝突 –

+0

我不是故意要提高每用戶安裝;。道歉,如果大家的理解是這樣 –