2010-03-03 12 views
22

gizleme:WiX - CustomAction ExeCommand - Böyle olarak çalışmaya komut satırı çalışan bir özel eylem kazanılmış ettik Konsolu

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

sorundur, kullanıcı ne zaman komut çalışır bir konsol açılır pencere görür.

Komut satırı, UAC yükseltmesi gerektirir, ancak kullanıcı etkileşimi gerektirmemelidir. Ayrıca dosyayı kurulumla birlikte yüklüyoruz, özel eylem After = "InstallFiles" ile çalışıyor.

Kullanıcının konsolu görmesini nasıl engelleriz?

cevap

2

EXE dosyasının kaynak koduna sahipseniz, bunu yapabilirsiniz. Konsol Uygulaması yerine Win32 Uygulaması EXE projesini yapın.

Eğer EXE dosyasının kaynak kodunu değiştiremez ise, bunu yapabilirsiniz:

  1. tarafından, süreci yürütmek için (WiX itibaren) DLL bir CustomAction çağrılması bir CustomAction DLL
  2. oluşturma konsol penceresini gizleme.
+0

İşlemin kaynak koduna erişimimiz yok, aksi takdirde özel bir eylem yazmış oluruz. Tek yolu bu mu? Bu, WiX'in sahip olması gereken no-brainer bir ayar gibi görünüyor. Bir süreci başlatmak için neden özel bir eylem yazmalıyım? – jonathanpeppers

6

UAC yükseltmesine ihtiyacınız varsa, bunun ertelenmiş bir yürütme CA'sı olduğundan emin olmanız gerektiğini unutmayın. Eklenen komut satırı argümanlarıyla el kitabından örnek aşağıda verilmiştir.

<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

Teşekkürler, bunu zaten yapıyoruz. – jonathanpeppers

+1

Bu çözüm, kayıt defterinizi yok etmeyi engelliyor. Yükleyicileri komut satırından derledim ve 'DllEntry = "CAQuietExec" satırı, yükleyicinin düzgün kurulmasından dolayı düzeltilemez bir duruma getirildi, ancak çıkış sırasında gerekli olan dosyaları içermiyordu. VM'imi yeniden oluşturmadan önce bunu düzeltmeye çalışmak için saatler harcadım. Geri yükleme noktalarına sahip olmalıydım, ama tabii ki yapmadım (sanal makinemin temel ayarları sorgulanabilirdi). Bu nihayet boşa çıkmadan önce zamanımı harcadım. Dikkatli ol! – Shadoninja

0

sadece cmd.exe

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

Umut için ikinci komut "exit" eklemek zorunda, Size yardımcı

bir tavuk ve yumurta sorun biraz o ele orada bir
+0

Hala konsol açılır penceresini hızlı bir şekilde görebiliyordunuz. Bu çok istenmeyen, kötü UI tasarımı ve çok "chop shop" gibi görünüyor. – jonathanpeppers

+1

Wix, 2007 yılından beri bu sorunu yaşıyor. Sorun hala çözülmedi. Cmd kullanarak, küçük programlarda benim için geçici bir çözüm. Ben Wix'i kullanmadım. –

+1

Kabul edilen cevaplar işe yarıyor. Çirkin cmd açılır. – jonathanpeppers

-1

Yürütülmeden önce yürütülebilir bir konsol uygulaması olarak işaretlenmeli ve konsol açılırken böyle bir exe başlatmak istiyorsanız, sürecin doğru bayraklarla oluşturulmuş olması gerekir. Yükleyiciniz bunları sağlayamıyorsa, arasında üçüncü bir .exe kullanmak mümkündür. Örneğin, Keybase yükleyici, yanıp sönen siyah pencereleri olmayan arka planda kalıcı konsol uygulamalarını çalıştırmak için this small utility'u başlatır.

İlgili konular