2012-10-16 25 views
8

我已經構建了一個使用嵌入自定義託管(C#)操作的WiX 3.6的Windows Installer程序包。WiX,UAC,託管的自定義操作和模擬

在此階段,在安裝需要

  1. 安裝程序使用特定的本地管理員帳戶運行(在此情況下,在SharePoint安裝帳戶,這是一個本地管理員)
  2. 用戶帳戶控制被禁用

確實沒有辦法繞過要求1,因爲託管操作只能在SharePoint安裝程序帳戶的上下文中運行時執行某些步驟。

我想刪除需求#2並讓安裝程序正常運行即使啓用UAC。

我已經研究了相當廣泛的問題,但仍然無法使其工作。我在我的軟件包中設置了InstallScope =「perMachine」,這似乎正確地提示了UAC提升,但安裝程序仍然失敗並出現臭名昭着的2869錯誤。

主要問題是我的自定義操作配置爲Impersonate =「yes」,因爲它必須在當前用戶的上下文中運行,而不是本地管理員帳戶。當我在線搜索時,幾乎所有「修復」都指向Impersonate =「no」在自定義操作中,但這不是我的選擇。

因此,我的問題是:有沒有辦法使用當前用戶的身份運行自定義託管操作,而無需完全禁用UAC?

+0

也喜歡這個答案。 –

+0

我正在嘗試做同樣的事情。我試圖解決它的方式是創建一個具有管理員權限的app.manifest所需的EXE(http://stackoverflow.com/questions/3915370/impersonating-in-net-using-process-start-and -uac/3915492#3915492)。然後,我將該EXE稱爲模擬用戶的類型2延遲自定義操作(http://stackoverflow.com/a/8828776/1203288)。但是,這可以在我的機器上運行,但我在其他機器上遇到了問題:只要require admin位於app.manifest中,它甚至不會在其他機器上運行。希望這給你一個好的開始。 – bsara

回答

2

當您使用Impersonate="yes"時,您的自定義操作將在沒有管理權限的情況下使用當前登錄的用戶的憑據運行。

Impersonate="no"您的自定義操作運行在系統上下文。在系統環境中運行時,自定義操作可以完全訪問系統。


WiX CustomAction element文檔,Impersonate屬性

該屬性指定是否將Windows安裝程序,它執行作爲本地系統,應在執行此自定義操作時冒充的安裝用戶的用戶上下文。通常,該值應爲'是',除非自定義操作需要提升特權才能將更改應用到機器

+0

我這樣做了,但我的應用程序拋出一個System.UnauthorizedAccess異常。當我擁有系統權限時,如何發生這種情況? – AstralisSomnium

+2

@AstralisSomnium嘗試確保您的自定義操作確實以完全訪問權限運行。 'Impersonate =「yes」'僅對_deferred_動作有效。反過來,延遲操作不能完全訪問安裝屬性,只能使用'CustomActionData'。 –

+6

我認爲這實際上是相反的。根據WIX文檔: 「此屬性指定執行LocalSystem的Windows安裝程序是否應在執行此自定義操作時模擬安裝用戶的用戶上下文。通常值應爲'yes',除非自定義操作需要提升權限才能將更改應用到機器上。' 所以冒充=「無」是指你的操作運行作爲LocalSystem,它已經完全進入機器,並冒充=「yes」表示自定義操作與安裝用戶權限運行。 –

2

你在哪裏引用自定義操作?

使用提升的特權運行.msi可能不夠。 要確保您的自定義操作使用提升的權限,您還必須使用延遲自定義操作並在InstallExecuteSequence中引用它。這可能無法解決您的問題,但底部鏈接的文章詳細解釋了安裝msi期間的UAC邏輯。

基本上,並非安裝程序所執行的所有操作都帶有特權,您必須確保在安裝程序使用提升特權時運行自定義操作

來源:http://blogs.msdn.com/b/rflaming/archive/2006/09/30/uac-in-msi-notes-when-general-custom-action-mitigation-fails.aspx

我希望這些信息對您有用,如果您共享您的自定義操作代碼,我可能是更多的幫助。

+1

雖然這個鏈接可能回答這個問題,但最好包括e這裏的答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+1

對不起,用更好的答案編輯它。我是新手,仍在學習如何使用計算器。謝謝。 – Epiderma