2009-09-16 62 views
5

我想从我的Inno Setup脚本中的application.exe中读取这三个值。可以阅读Inno Setup中的AssemblyFile信息

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

有没有人知道这可能是如何实现的?

我知道我可以得到最后一个使用GetFileVersion("path/to/greatapp.exe") 前两个有类似的东西吗?

+0

我不认为这是可行的,因为这些属性是特定于.NET的。除非你编写自己的扩展来实现这个目标。所以我最终在我的脚本中对它们进行了严格的编码。 – 2009-09-17 06:57:06

回答

8

使用由Inno Setup的预处理器(ISPP)提供的GetStringFileInfo()功能如下:

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

正如您已经提到过的,您可以使用GetFileVersion()函数而不是上面的#3。

此外,请查看随Inno Setup安装附带的ISPPBuiltins.iss脚本文件。它包含一个GetFileCompany()函数来代替上面的#1,并且可以用类似的方式实现上面的#2。

0

我不知道Inno安装程序,但我想它支持像其他安装工具(Visual Studio,Wix,InstallShield或Wise)一样的自定义操作。

所以,您需要创建一个自定义操作来从程序集中读取这些信息。在您的自定义操作,您需要添加以下代码以获取程序集属性:

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

它可能需要很多努力,因为通常Inno安装程序扩展不是在.NET中创作的,这意味着您需要手动解析文件以查询属性。 – 2009-09-17 06:58:30

+0

我偶然发现了这个地方,这似乎工作: 的#define MyAsmVersion GetStringFileInfo( “C:\ ProjectFolder \ BIN \发布\” + EXENAME, “集结号 版”) 这似乎需要 '大会' 之间的空间和'版本' – TonyM 2017-12-01 12:56:24