2009-12-09 32 views
16

Làm cách nào để khởi chạy ứng dụng của tôi sau khi cài đặt không có giao diện người dùng (hoặc ở chế độ im lặng)? Cảm ơn!Khởi chạy sau khi cài đặt, không có giao diện người dùng?


Tôi có một trình cài đặt có giao diện người dùng có tùy chọn để chạy sau khi cài đặt. Bây giờ tôi muốn ứng dụng của tôi tự cập nhật bằng cách tải xuống và chạy phiên bản trình cài đặt mới ở chế độ im lặng, nhưng sau khi cập nhật xong, ứng dụng sẽ không khởi chạy lại.

+0

Lưu ý: Tôi đang sử dụng thuộc tính có tên LAUNCHAPPONEXIT để kiểm soát hành động tùy chỉnh khởi chạy ứng dụng của tôi. Và giá trị mặc định của nó là 1. – deerchao

+0

Đây là cách tiếp cận tôi đang sử dụng để khởi chạy sau khi thiết lập: http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/ – deerchao

Trả lời

15

Từ chủ đề MSDN trên sequencing custom actions:

Như trong trường hợp của các hành động tiêu chuẩn, hành động tùy chỉnh được lên kế hoạch trong các InstallUISequence hoặc AdminUISequence chạy chỉ khi giao diện người dùng nội bộ được thiết lập để mức đầy đủ.

Vì vậy, tôi đoán hành động tùy chỉnh của bạn được lên lịch trong chuỗi giao diện người dùng chứ không phải trong InstallExecuteSequence. Cố gắng lên kế hoạch hành động tùy chỉnh của bạn trong InstallExecuteSequence như thế này:

<InstallExecuteSequence> 
    <Custom Action='LaunchApplication' After='InstallFiles'/> 
    </InstallExecuteSequence> 

nơi "LaunchApplication" nên được thay thế bằng Id của nguyên tố CustomAction của bạn.

chỉnh sửa: Tôi đã xem instructions mà bạn đã theo dõi và tôi không thấy hành động tùy chỉnh để khởi chạy ứng dụng đang được lên lịch theo trình tự bất kỳ. Nó chỉ được kích hoạt từ một hành động UI (nhấn vào nút Finish). Điều này giải thích tại sao nó không bao giờ được thực thi trong khi cài đặt im lặng.

chỉnh sửa: đầy đủ mẫu (đó là một chút cẩu thả vì nó cũng cố gắng để thực hiện thao tác tùy chỉnh trên gỡ bỏ cài đặt, sửa chữa vv nhưng đối với một số lý do tôi không thể có được điều kiện "không được cài đặt" để làm việc)

<?xml version='1.0' encoding='utf-8'?> 
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'> 
    <Product 
     Name='ProductName' 
     Id='*' 
     Language='1033' 
     Version='0.0.1' 
     Manufacturer='ManufacturerName' > 
     <Package 
      Keywords='Installer' 
      Description='Launch application demo' 
      Manufacturer='ManufactererName' 
      InstallerVersion='100' 
      Languages='1033' 
      Compressed='yes' 
      SummaryCodepage='1252'/> 

     <Media Id='1' Cabinet='test.cab' EmbedCab='yes'/> 

     <Directory Id='TARGETDIR' Name="SourceDir"> 
     <Directory Id='ProgramFilesFolder'> 
      <Directory Id='TestFolder' Name='Test' > 
       <Component Id="ExeComponent" Guid="*"> 
        <File Id="ExeFile" Source="c:\windows\notepad.exe" /> 
       </Component> 
      </Directory> 
     </Directory> 
     </Directory> 

     <Feature Id='Complete' 
      Display='expand' 
      Level='1' 
      Title='Test' 
      Description='Test'> 
     <ComponentRef Id="ExeComponent" /> 
     </Feature> 

     <InstallExecuteSequence> 
     <Custom Action='LaunchInstalledExe' After='InstallFinalize'/> 
     </InstallExecuteSequence> 

     <CustomAction Id="LaunchInstalledExe" 
     FileKey="ExeFile" 
     ExeCommand="" 
     Execute="immediate" 
     Impersonate="yes" 
     Return="asyncNoWait" /> 

    </Product> 
</Wix> 
+0

Tôi đã thử: LAUNCH_APP_ON_EXIT Có vẻ như tôi không thể làm cho nó hoạt động, có hoặc không có giao diện người dùng, ngay cả khi tôi đã loại bỏ điều kiện LAUNCH_APP_ON_EXIT. Bạn có thể cung cấp một ví dụ đơn giản hoạt động không? Cảm ơn! – deerchao

+0

Cảm ơn ví dụ của bạn. Tôi đã thêm thuộc tính UPDATING_AUTOMATICALLY để kiểm soát xem hành động tùy chỉnh có đang chạy hay không. – deerchao

+0

Sau đó, tôi vượt qua UPDATING_AUTOMATICALLY = 1 trong dòng lệnh. – deerchao

1

Tôi cho rằng bạn đang khởi chạy ứng dụng của mình từ hành động tùy chỉnh, được kích hoạt thông qua thuộc tính được liên kết với hộp kiểm. Nếu đúng như vậy, bạn có thể thử chỉ định thuộc tính đó làm đối số dòng lệnh cho setup.exe. Này, nếu hành động tùy chỉnh của bạn được ràng buộc với LAUNCH_NEW_VERSION sở hữu MSI, bạn có thể gọi setup.exe như thế này:

setup.exe /q LAUNCH_NEW_VERSION=1 

Quá trình cài đặt bootstrapper tiêu chuẩn phải vượt qua đó sở hữu/giá trị cho các động cơ MSI. Nếu không, bạn có thể xem xét việc gọi trực tiếp .msi thay vì gọi exe bootstrapper để chạy trình cài đặt của bạn.

+0

Có, tôi đang sử dụng thuộc tính có tên LAUNCHAPPONEXIT để kiểm soát hành động tùy chỉnh và giá trị mặc định của nó được đặt thành 1. Nhưng chương trình sẽ không được bắt đầu ở chế độ im lặng bất kỳ cách nào. Tôi đã thử setup.exe/q LAUNCHAPPONEXIT = 1 Nó cũng không hoạt động. – deerchao

+0

thử truy cập trực tiếp .msi thay vì boot.exe của setup.exe. –

+0

Tôi đã thử nhiều lần không có may mắn: "msiexec/i DepotM.Setup.msi/qn LAUNCHAPPONEXIT = 1" Tuy nhiên nếu tôi thay đổi thành/qf (hiển thị toàn bộ ui) nó sẽ chạy sau khi cài đặt./qb không hoạt động. – deerchao

3

Trong giải pháp cuối cùng của tôi, tôi sử dụng hai thuộc tính, một cho giao diện người dùng (LAUNCH_APP_ON_EXIT), một cho đối số dòng lệnh (UPDATING_AUTOMATICALLY).

tôi phải làm điều này vì nếu tôi chạy CustomAction sau InstallFinalize trong chế độ giao diện người dùng đầy đủ, ứng dụng sẽ bắt đầu trước bạn nhấp vào nút "Finish".

Bây giờ tôi có thể gọi setup.exe/qn UPDATING_AUTOMATICALLY = 1 trong chương trình của mình để cập nhật.

Dưới đây là tất cả:

<Property Id="LAUNCH_APP_ON_EXIT" Value="1" /> 
<Property Id="UPDATING_AUTOMATICALLY" Value ="0" /> 

<CustomAction Id="LaunchApplication" FileKey="mainExecutableFile" ExeCommand="" Execute="immediate" Impersonate="yes" Return="asyncNoWait" /> 

<UI> 
    <!-- explainations: http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/ --> 
    <UIRef Id="MyWixUI_InstallDir" /> 
    <UIRef Id="WixUI_ErrorProgressText"/> 

    <Publish Dialog="MyExitDialog" Control="Finish" Order="1" Event="DoAction" Value="LaunchApplication">LAUNCH_APP_ON_EXIT</Publish> 
</UI> 

<InstallExecuteSequence> 
    <Custom Action='LaunchApplication' After='InstallFinalize'>UPDATING_AUTOMATICALLY = 1</Custom> 
</InstallExecuteSequence> 
+0

Điều này rất hữu ích. Trong tình huống của tôi, tôi muốn sử dụng hộp kiểm UI chuẩn để khởi động chương trình * nếu * Giao diện người dùng được hiển thị ... nhưng nếu cài đặt được chạy âm thầm, tôi muốn tự động khởi chạy nó. Việc thêm thuộc tính UPDATING_AUTOMATICALLY vào phần là rất quan trọng. Cảm ơn! – stuzor

1

Đây là phương pháp tôi đã diễn.

<Property Id="WixShellExecTarget" Value="[#(the id of your exe here)]" /> 
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> 

Điều này sẽ thực thi bạn đã nhập id tệp nào trong Giá trị. [#] Là cần thiết. Tôi đã sử dụng nó và chạy nó thông qua giao diện người dùng nhưng bạn sẽ có thể gọi hành động tùy chỉnh này ở bất cứ đâu và nó hoạt động.

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