2009-09-16 36 views
5

Tôi muốn đọc ba giá trị này từ ứng dụng của tôi.exe trong tập lệnh Inno Setup của tôi.Tôi có thể đọc thông tin AssemblyFile trong Inno Setup

[assembly: AssemblyCompany("My Company")] 
[assembly: AssemblyProduct("My Great Application")] 
[assembly: AssemblyFileVersion("9.3.2")] 

Có ai biết điều này có thể hoàn thành không?

Tôi biết tôi có thể lấy cái cuối cùng bằng cách sử dụng GetFileVersion("path/to/greatapp.exe") có điều gì đó tương tự cho hai cái đầu tiên không?

+0

Tôi không nghĩ điều đó có thể thực hiện được vì các thuộc tính đó là .NET cụ thể. Trừ khi bạn viết phần mở rộng của riêng bạn để đạt được mục tiêu đó. Vì vậy, tôi kết thúc với khó mã hóa chúng trong kịch bản của tôi. –

Trả lời

8

Sử dụng GetStringFileInfo() chức năng được cung cấp bởi Setup Inno Preprocessor (ISPP) như sau:

  1. GetStringFileInfo("path/to/greatapp.exe", "CompanyName")
  2. GetStringFileInfo("path/to/greatapp.exe", "ProductName")
  3. GetStringFileInfo("path/to/greatapp.exe", "FileVersion")

Như bạn đã đề cập, bạn có thể sử dụng hàm GetFileVersion() thay vì # 3 ở trên.

Ngoài ra, hãy xem tập tin kịch bản ISPPBuiltins.iss đi kèm với cài đặt Inno Setup của bạn. Nó chứa hàm GetFileCompany() để sử dụng thay vì # 1 ở trên và bạn có thể thực hiện # 2 ở trên theo cách tương tự.

0

Tôi không biết thiết lập Inno nhưng tôi đoán nó hỗ trợ các hành động tùy chỉnh như các công cụ thiết lập khác (Visual Studio, Wix, InstallShield hoặc Wise).

Vì vậy, bạn sẽ cần phải tạo một hành động tùy chỉnh để đọc thông tin này từ hội đồng. Trong hành động tùy chỉnh của bạn, bạn cần phải thêm đoạn mã sau để lấy lắp ráp các thuộc tính:

Assembly assembly = Assembly.LoadFrom (@"path\to\greatapp.exe"); 
object[] attributes = assembly.GetCustomAttributes(true); 

if (attributes.Length > 0) 
{ 
    foreach (object o in attibutes) 
    { 
     //Do Something with the attribute 
    } 
} 
+0

Có thể mất rất nhiều công sức, vì thường thì tiện ích mở rộng Inno Setup không được tác giả trong .NET, điều này có nghĩa là bạn cần phải phân tích cú pháp tệp theo cách thủ công để truy vấn thuộc tính. –

+0

Tôi tình cờ gặp điều này ở đâu đó và điều này dường như hoạt động: #define MyAsmVersion GetStringFileInfo ("C: \ ProjectFolder \ bin \ Release \" + ExeName, "Assembly Version") Dường như cần một khoảng trống giữa 'Assembly' và 'Phiên bản' – TonyM

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