2017-08-16 143 views
1

我正在使用WIX構建將作爲常規用戶執行但具有系統特權(AlwaysInstallElevated = 1)的MSI。我定義了兩個執行net.exe的自定義操作。
net.exe命令不會像常規用戶那樣執行。我還測試了以管理員身份執行此msi並且net.exe命令正在執行。
我已經記錄了msi輸出,並且看到了導致我相信net.exe命令沒有被執行的錯誤代碼。我深入到社區,看是否作爲系統執行wix msi自定義操作

  1. 我試圖做的是可能
  2. 我是否需要改用exe文件作爲自定義操作,以便將EXE安裝升高。

在此先感謝您的反饋意見。

<CustomAction Directory="TARGETDIR" ExeCommand="[SystemFolder]net.exe user TestUser /add" Return="ignore" Execute="deferred" HideTarget="no" Impersonate="no" Id="Command1">Command1</CustomAction> 
<CustomAction Directory="TARGETDIR" ExeCommand="[SystemFolder]net.exe localgroup Administrators TestUser /add" Return="ignore" Execute="deferred" HideTarget="no" Impersonate="no" Id="Command2">Command2</CustomAction> 
<InstallExecuteSequence> 
    <Custom Action="Command1" After="PublishProduct">NOT Installed</Custom> 
    <Custom Action="Command2" After="Command1">NOT Installed</Custom> 
</InstallExecuteSequence> 

機器策略和用戶策略允許msis作爲系統執行。

MSI (c) (DC:F8) [09:17:39:438]: Machine policy value 'AlwaysInstallElevated' is 1 
MSI (c) (DC:F8) [09:17:39:438]: User policy value 'AlwaysInstallElevated' is 1 
MSI (c) (DC:F8) [09:17:39:438]: Running product '{34ED8E61-40EA-47CE-95E7-8EE3CDBCB1E8}' with elevated privileges: All apps run elevated. 

錯誤

MSI (s) (8C:8C) [20:39:18:989]: Executing op: ActionStart(Name=Command1,,) 
MSI (s) (8C:8C) [20:39:18:989]: Executing op: CustomActionSchedule(Action=Command1,ActionType=3170,Source=C:\,Target=C:\WINDOWS\SysWOW64\net.exe user TestUser /add,) 
CustomAction Command1 returned actual error code 2 but will be translated to success due to continue marking 
MSI (s) (8C:8C) [20:39:19:535]: Executing op: ActionStart(Name=Command2,,) 
MSI (s) (8C:8C) [20:39:19:535]: Executing op: CustomActionSchedule(Action=Command2,ActionType=3170,Source=C:\,Target=C:\WINDOWS\SysWOW64\net.exe localgroup Administrators TestUser /add,) 
CustomAction Command2 returned actual error code 1 but will be translated to success due to continue marking 

回答

0

即使是在安裝由管理員模擬的自定義操作,而不擡高運行啓動。所以答案就是你的編號2.從具有CreateProcess類型的啓動的升級過程開始安裝。話雖如此,我不清楚爲什麼你無法運行CA,因爲似乎沒有任何事情要求用戶成爲實際用戶而不是系統帳戶。所以失敗可能不是提升,這就是將任務傳遞給一個不會給你提供良好錯誤信息的程序的問題。所以......

我已經見過樣板代碼來做這種事情,我相信無論如何,WiX都有它,Util User元素,這可能是要走的路。

+0

菲爾,這些結果對我來說沒有意義。我認爲CA被設置爲延期並且冒充爲「否」。一定還有其他的錯誤。無論哪種情況,他都應該切換到WiX的內置功能。 –

+0

斯坦因,這篇文章建議(在第2點)改變自定義操作來運行他們模仿和提升,因爲他們不工作。我的回答只是說我沒有理由不按規定工作,因此問題可能不僅僅是提升要求。所以我同意你的看法,因爲這就是我所說的,但也許我錯過了你評論的地方。 – PhilDW

0

Like 菲爾說,不要用net.exe來創建用戶。使用維克斯的內置功能來做到這一點(我應該已經找到了更好的樣本,但沒有時間現在):

我的第一個本能的反應會是, AlwaysInstallElevated策略將被錯誤配置,但從日誌文件判斷它設置正確。我很生疏,但模仿看起來像它被正確設置爲「沒有菲爾?而日程安排推遲和似乎安置在InstallFinalize之前 - 似乎可以在我的頭頂。

是不是net.exe無法正常運行LocalSystem?那麼爲什麼安裝以管理員身份啓動時會起作用?有人會認爲LocalSystem具有所有必需的權限。當前用戶的訪問令牌不是以某種方式連接到msiexec.exe進程? (用於記錄目的或某物)。或者管理員帳戶有LocalSystem沒有的特權嗎?如果沒有假冒,該特權如何適用?您是否嘗試以普通用戶身份手動啓動net.exe?在以普通用戶身份運行時嘗試創建用戶時會遇到什麼錯誤?

在這兩種情況下,如果有其他選擇,我不會浪費時間運行EXE自定義操作。我不記得我最後一次。我通常使用VBScript,C++和更早的版本,我使用了Installscript - 以及其所有陳舊的語法。 只需切換到內置的WiX結構,你應該沒問題。