我正在开发一个从中心点自动更新程序的方案.为了帮助我,我需要一种方法来获取用于在运行时安装progarm的msi文件的版本号,因此我可以将安装的版本与服务器上的最新版本进行比较(已经解决了这部分)并决定是否不要更新.为了清楚起见,我已经有一种方法可以使用msi.dll打开msi文件并获取版本#out.问题是引导问题.如果用户第一次安装程序,我的程序如何知道在哪里找到msi文件(在客户端上)?
解决方案可以像msi一样简单,在运行时创建一个版本为#的文本文件.如果可以,我想避免查询注册表.
如果我无法弄清楚这一点,我将不得不特别注意在GUI项目和MSI安装程序中保持版本#相同,这让我很烦.
有什么想法吗?
我假设你想获得MSI的ProductVersion属性.
您可以使用COM相当容易地完成此操作.
将"Microsoft Windows Installer对象库"的COM引用添加到C#项目中.
然后尝试以下程序:
namespace TestCS
{
using System;
using WindowsInstaller;
internal class Test
{
private static void Main(string[] args)
{
if (args.Length < 1)
{
return;
}
Console.WriteLine(GetMsiVersion(args[0]));
}
private static string GetMsiVersion(string installerPath)
{
Type t = Type.GetTypeFromProgID("WindowsInstaller.Installer");
Installer inst = (Installer)Activator.CreateInstance(t);
Database d = inst.OpenDatabase(
installerPath,
MsiOpenDatabaseMode.msiOpenDatabaseModeReadOnly);
View v = d.OpenView(
"SELECT * FROM Property WHERE Property = 'ProductVersion'");
v.Execute(null);
Record r = v.Fetch();
string result = r.get_StringData(2);
return result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |