2010-03-03 112 views
22

我們已經得到運行命令行自定義操作這樣工作:維克斯 - CustomAction ExeCommand - 隱藏控制檯

<CustomAction Id="OurAction" 
       FileKey="OurInstalledExe.exe" 
       ExeCommand="our command line args" 
       Execute="deferred" 
       Return="check" /> 

的問題是,用戶將看到一個彈出式控制檯命令運行時。

命令行需要UAC提升,但不應該要求任何用戶交互。我們還使用安裝程序安裝該文件,自定義操作運行在=「InstallFiles」之後。

我們如何防止用戶看到控制檯?

回答

2

如果你有EXE文件的源代碼,這是你可以做的。使EXE項目Win32應用程序項目而不是控制檯應用程序

如果您不能修改EXE文件的源代碼,你可以這樣做:

  1. 創建一個CustomAction DLL
  2. 調用的DLL(從維克斯)一個CustomAction執行過程中,隱藏控制檯窗口。
+0

我們無法訪問該流程的源代碼,否則我們會寫一個自定義操作。這是唯一的方法嗎?這看起來像是WiX應該具備的一個簡單的設置。爲什麼我必須編寫一個自定義操作來啓動一個流程? – jonathanpeppers 2010-03-03 17:22:23

6

請注意,如果您確實需要UAC提升,那麼您需要確保它是延遲執行CA.以下是添加了命令行參數的手冊中的示例。

<CustomAction Id="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty" 
       Value="&quot;[#MyExecutable.exe]&quot; /arguments" Execute="immediate"/> 
<CustomAction Id="QtExecDeferredExampleWithProperty" BinaryKey="WixCA" DllEntry="CAQuietExec" 
       Execute="deferred" Return="check" Impersonate="no"/> 
. 
. 
. 
<InstallExecuteSequence> 
    <Custom Action="QtExecDeferredExampleWithProperty_Cmd" After="CostFinalize"/> 
    <Custom Action="QtExecDeferredExampleWithProperty" After="TheActionYouWantItAfter"/> 
</InstallExecuteSequence> 
+0

謝謝,我們已經在做這個。 – jonathanpeppers 2010-03-04 14:06:53

+1

此解決方案有破壞註冊表的風險。我從命令行編譯我的安裝程序,'DllEntry ='CAQuietExec''這一行使我的註冊表處於不可修復的狀態,因爲安裝程序安裝正常,但沒有出口所需的文件。在最終重新創建虛擬機之前,我花了好幾個小時試圖解決這個問題我應該有恢復點,但我當然沒有(我的虛擬機的基本設置值得懷疑)。在我終於放棄之前,這浪費了我的時間。小心! – Shadoninja 2015-10-06 18:04:13

0

你只需要添加第二個命令「退出」,爲CMD.EXE

ExeCommand="[SystemFolder]cmd.exe /C start MyExe.exe &amp; exit" 

希望,它可以幫助你

+0

你仍然可以看到控制檯彈出的真實。這是非常不可取的,看起來像可憐的UI設計,而且非常「扒店」。 – jonathanpeppers 2012-07-04 23:54:22

+1

威克斯自2007年以來就有這個問題。這個問題還沒有解決。在小程序中使用cmd正在爲我工​​作。我用過不使用Wix。 – 2012-07-05 10:55:47

+1

那麼,接受的答案作品。沒有醜陋的cmd彈出。 – jonathanpeppers 2012-07-05 13:00:59

-1

有一個有點雞和蛋的問題在於,可執行文件必須在啓動之前標記爲控制檯應用程序,並且如果要在不彈出控制檯的情況下啓動此類exe,則必須使用正確的標誌創建其進程。如果您的安裝程序無法提供這些文件,則可以在其間使用第三個.exe文件。例如,Keybase安裝程序將啓動this small utility以在後臺運行持久控制檯應用程序,而不會顯示閃爍的黑色窗口。