2011-08-22 32 views
6

Tôi có một tệp MSI được xây dựng từ C# Visual Studio 2010. Phiên bản được đặt thông qua thuộc tính Version. Tôi muốn biết nếu có một cách để xác định phiên bản mà không cần phải cài đặt các tập tin. Hiện tại khi nhấp chuột phải và xem các thuộc tính nó không được hiển thị.Xác định phiên bản của MSI mà không cần cài đặt nó

+3

Hãy xem bài đăng của anh ấy. Điều này có thể hữu ích cho câu hỏi của bạn: http://stackoverflow.com/questions/815744/retrieving-version-of-an-msi-file-built-with-wix – hsalimi

Trả lời

3

Có - tôi nghĩ rằng bạn cần phải kiểm tra cơ sở dữ liệu MSI tuy nhiên, yêu cầu một số cuộc gọi API hoặc tiện ích trình bao bọc.

Microsofts ORCA ứng dụng sẽ cho phép bạn thực hiện việc này (mặc dù tôi chưa từng thử bản thân mình).

+0

cảm ơn câu trả lời của bạn. Đối với bất kỳ ai khác, nó được tìm thấy trong tab 'Thuộc tính' trong ORCA –

5

Mã sau có thể hữu ích. Nhưng hãy nhớ rằng trước tiên bạn nên thêm một tham chiếu COM vào Thư viện đối tượng Trình cài đặt Windows của Microsoft và thêm không gian tên WindowsInstaller vào mã của bạn. Các chức năng sau đây có thể là những gì bạn cần.

public static string GetMsiInfo(string msiPath, string Info) 
{ 
    string retVal = string.Empty; 

    Type classType = Type.GetTypeFromProgID(“WindowsInstaller.Installer”); 
    Object installerObj = Activator.CreateInstance(classType); 
    Installer installer = installerObj as Installer; 

    // Open msi file 
    Database db = installer.OpenDatabase(msiPath, 0); 

    // Fetch the property 
    string sql = String.Format(“SELECT Value FROM Property WHERE Property=’{0}’”, Info); 
    View view = db.OpenView(sql); 
    view.Execute(null); 

    // Read in the record 
    Record rec = view.Fetch(); 
    if (rec != null) 
     retVal = rec.get_StringData(1); 

    return retVal; 
} 

Nếu bạn cần phiên bản, hãy chuyển tên của tệp MSI bạn muốn, ví dụ:

string version = GetMsiInfo("d:\product.msi", “ProductVersion”); 
+0

cảm ơn, đoạn mã thực sự hữu ích. –

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