2010-03-03 43 views
22

Chúng tôi đã nhận được một hành động tùy chỉnh chạy dòng lệnh để làm việc như vậy:WiX - CustomAction ExeCommand - Ẩn Bảng điều khiển

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

Vấn đề là, người dùng thấy một giao diện điều khiển cửa sổ bật lên khi lệnh chạy.

Dòng lệnh yêu cầu độ cao UAC, nhưng không được yêu cầu bất kỳ tương tác người dùng nào. Chúng tôi cũng cài đặt các tập tin với các thiết lập, hành động tùy chỉnh chạy After = "InstallFiles".

Làm cách nào để ngăn người dùng xem bảng điều khiển?

Trả lời

2

Nếu bạn có mã nguồn của tệp EXE, đây là những gì bạn có thể làm. Biến dự án EXE Win32 Application thay vì Ứng dụng giao diện điều khiển.

Nếu bạn không thể sửa đổi mã nguồn của tập tin EXE, bạn có thể làm điều này bằng cách:

  1. Tạo một CustomAction DLL
  2. Gọi một CustomAction trong DLL (từ WiX) để thực hiện quá trình này, bởi ẩn cửa sổ bảng điều khiển.
+0

Chúng tôi không có quyền truy cập vào mã nguồn của quy trình, chúng tôi đã viết một hành động tùy chỉnh khác. đây có phải cách duy nhất không? Điều này có vẻ giống như một thiết lập không có trí tuệ mà WiX nên có. Tại sao tôi phải viết một hành động tùy chỉnh để bắt đầu một quy trình? – jonathanpeppers

6

Lưu ý rằng nếu bạn yêu cầu độ cao UAC, thì bạn cần đảm bảo rằng đó là CA thực thi hoãn lại. Đây là ví dụ từ sổ tay với các đối số dòng lệnh được thêm vào.

<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

Cảm ơn, chúng tôi đã làm điều này. – jonathanpeppers

+1

Giải pháp này có nguy cơ phá hủy registry của bạn. Tôi đang biên dịch các trình cài đặt của tôi từ dòng lệnh và dòng 'DllEntry = "CAQuietExec"' đặt đăng ký của tôi ở trạng thái không thể khắc phục được do trình cài đặt được cài đặt tốt, nhưng không yêu cầu các tệp cần thiết trên đường ra. Tôi đã dành hàng giờ cố gắng sửa lỗi này trước khi tạo lại máy ảo của mình. Tôi cần phải có điểm khôi phục, nhưng tất nhiên là tôi không (cài đặt cơ bản của VM là vấn đề). Thời gian lãng phí thời gian của tôi trước khi tôi cuối cùng đã bỏ cuộc. Hãy cẩn thận! – Shadoninja

0

Bạn chỉ cần thêm thứ hai lệnh "exit" cho cmd.exe

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

Hope, Nó giúp bạn

+0

Bạn sẽ vẫn thấy giao diện điều khiển bật lên thật nhanh. Điều này là rất không mong muốn, có vẻ như thiết kế giao diện người dùng kém, và rất "chop cửa hàng". – jonathanpeppers

+1

Wix có vấn đề này kể từ năm 2007. Vấn đề vẫn chưa được khắc phục. Sử dụng cmd là workaround workaround cho tôi trong các chương trình nhỏ. Tôi đã không sử dụng Wix. –

+1

Vâng, các tác phẩm được trả lời được chấp nhận. Không có cửa sổ bật lên cmd xấu xí. – jonathanpeppers

-1

Có một chút của một con gà và quả trứng vấn đề trong một mà thực thi phải được đánh dấu là một ứng dụng giao diện điều khiển trước khi nó bắt đầu, và nếu bạn muốn khởi động một exe như vậy mà không cần bàn điều khiển bật lên, nó phải có quá trình được tạo ra với các cờ bên phải. Nếu trình cài đặt của bạn không thể cung cấp, bạn có thể sử dụng một phần ba .exe ở giữa. Ví dụ, trình cài đặt Keybase khởi chạy this small utility để chạy các ứng dụng giao diện điều khiển liên tục trong nền mà không có cửa sổ màu đen nhấp nháy.

Các vấn đề liên quan