2010-01-05 117 views
6

Tôi đang cố chạy tệp MSI từ C# bằng phương thức Proces.Start. Các tập tin MSI là tốt, bởi vì tôi có thể chạy bình thường, nhưng khi tôi cố gắng chạy các tập tin MSI trong một số mã C# tôi nhận được lỗi sau.MSI không chạy từ bên trong C#

"gói cài đặt này có thể không được mở ra. Xác minh rằng các gói tồn tại, và bạn có thể truy cập vào nó, hoặc tiếp xúc các nhà cung cấp ứng dụng để xác minh rằng đây là một cửa sổ có giá trị gói cài đặt"

Dưới đây là đoạn code mà tôi đang sử dụng để chạy các tập tin MSI ...

Process p = Process.StartApplication.StartupPath "/Packages/Name.msi"); 

p.WaitForExit(); 

Làm thế nào tôi có thể khắc phục sự cố này?


OK, tôi đã hiểu ngay bây giờ. Tôi chỉ thay đổi nó để chạy tập tin setup.exe được tạo ra với tập tin MSI, thay vì chạy tập tin MSI ...

Trả lời

14

Các tập tin msi không thể tự chạy. Nếu bạn nhấp đúp chuột vào chúng, Windows sẽ bắt đầu

msiexec /i PathToYour.msi

Bạn có cố gắng làm điều đó một cách rõ ràng?

Ví dụ: (Courtesy @Webleeuw)

Process p = new Process(); 
p.StartInfo.FileName = "msiexec"; 
p.StartInfo.Arguments = "/i PathToYour.msi"; 
p.Start(); 
+0

tha thứ cho tôi vì đã chậm, nhưng làm thế nào tôi sẽ làm điều đó với Process.Start? – Cwisking

+0

Xem câu trả lời của Webleeuw cho một mẫu hoàn chỉnh. –

9

bổ sung câu hỏi bình luận tấm áp phích về Benjamin của câu trả lời:

Process p = new Process(); 
p.StartInfo.FileName = "msiexec"; 
p.StartInfo.Arguments = "/i PathToYour.msi"; 
p.Start(); 
+2

Không hiệu quả với tôi. Nó đang hiển thị hộp trình cài đặt windows với các hướng dẫn vì một số lý do. – alice7

6

Nó cũng có thể chạy file .msi trực tiếp với gắn liền ứng dụng. Điều này xảy ra khi bạn thiết UseShellExecute để true:

Process.Start(new ProcessStartInfo() 
    { 
     FileName = @"c:\somepath\mySetup.msi", 
     UseShellExecute = true 
    }); 
+0

điều này làm việc cho tôi trong khi/i vì một lý do nào đó không ... – Niklas

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