チュートリアルGet version from MSI without installed it からこのコードを使用しようとしていますが、「msi.dll」を参照として Visual Studio 2010 に追加しようとすると、このエラーが発生します。
ファイルまたはアセンブリ 'msi.dll' またはその依存関係の 1 つを読み込めませんでした。モジュールには、アセンブリ マニフェストが含まれている必要がありました。
このファイルはマネージド アセンブリではない可能性があります
チュートリアルGet version from MSI without installed it からこのコードを使用しようとしていますが、「msi.dll」を参照として Visual Studio 2010 に追加しようとすると、このエラーが発生します。
ファイルまたはアセンブリ 'msi.dll' またはその依存関係の 1 つを読み込めませんでした。モジュールには、アセンブリ マニフェストが含まれている必要がありました。
このファイルはマネージド アセンブリではない可能性があります
Wix プロジェクトの Deployment Tools Foundation (DTF) から「Microsoft.Deployment.WindowsInstaller.dll」を使用します。DTF は、多くの msi.dll に対してマネージ ラッパーを提供します。Wix は役立つドキュメントも提供しています。
ここで DTF を使用すると、C# で msi のバージョン番号にアクセスする方法が示されます
using Microsoft.Deployment.WindowsInstaller;
namespace Msi.Tables
{
public class PropertyTable
{
public static string Get(string msi, string name)
{
using (Database db = new Database(msi))
{
return db.ExecuteScalar("SELECT `Value` FROM `Property` WHERE `Property` = '{0}'", name) as string;
}
}
public static void Set(string msi, string name, string value)
{
using (Database db = new Database(msi, DatabaseOpenMode.Direct))
{
db.Execute("UPDATE `Property` SET `Value` = '{0}' WHERE `Property` = '{1}'", value, name);
}
}
}
}
それから私のアプリケーションから
string msiVersion = PropertyTable.Get("MyInstall.msi", "ProductVersion");
Orca を使用して msi テーブルを表示できます。MSDN では、プロパティ テーブルに関するドキュメントを提供しています。Windows インストーラーの SQL 構文の詳細は、MSDN でも入手できます。
32 ビット マシンでアセンブリを登録するには
REGSVR32 MSI.DLL
64 ビット マシンでアセンブリを登録するには
cd \windows\syswow64 regsvr32 C:\WINDOWS\system32\msi.dll
コードプロジェクトから:
バージョン番号またはその他の製品関連のものにアクセスするには、Visual Studio .NET に DLL 参照が必要です。DLL 名: msi.dll (system32 に存在)。
ソリューション エクスプローラーでプロジェクトへの参照を追加する必要があると思います (SE の [参照] を右クリック -> [参照の追加] -> [system32] ディレクトリの msi.dll を参照します)。
参照に追加system.management
し、名前空間を含めます。
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Product where Name LIKE '%Your MSI Name%'");
foreach (ManagementObject obj in searcher.Get())
{
var version = obj["Version"];
}
これにより、コントロール パネルにインストールされているソフトウェアのバージョンがわかります。