当目录表中没有名为“INSTALLDIR”,“INSTALLDIRECTORY”的目录时,如何从MSI读取安装目录
本文关键字:安装 读取 MSI INSTALLDIR INSTALLDIRECTORY | 更新日期: 2023-09-27 17:57:16
我想读取 MSI 的安装目录。当目录表中的"安装目录"、"安装目录"或"安装位置"指定安装目录时,我能够读取安装目录。但是许多msi不包含"INSTALLDIR"左右。然后如何确定特定msi的安装目录是什么。
是否有任何可用于指定安装目录的特定关键字列表,因为某些msi包含INSTALLDIR,某些包含INSTALLDIRECTORY或某些包含INSTALLLOCATION。
我正在使用以下代码狙击来获取安装目录
DataTable directoryTable;
directoryTable = this.ReadMsiTableByName(msiFile, "Directory"); // get Directory table of msi specifiec bt msiFile.
foreach (DataRow row in directoryTable.Rows)
{
if (row["Directory"].ToString() == "INSTALLLOCATION" || row["Directory"].ToString() == "INSTALLDIR" || row["Directory"].ToString() == "INSTALLDIRECTORY")
{
installDirectoryPath = row["Directory_Parent"].ToString();
break;
}
}
string directory = installDirectoryPath;
while (directory != "TARGETDIR")
{
foreach (DataRow row in directoryTable.Rows)
{
if (row["Directory"].ToString() == directory)
{
installDirectoryPath = row["Directory_Parent"].ToString() + "//" + installDirectoryPath;
directory = row["Directory_Parent"].ToString();
break;
}
}
}
请告知如何获取MSI的安装目录,如果安装目录条目不在目录表中。我正在用 C# 编写代码并使用 WiX dll。
由于"INSTALLDIR","INSTALLDIRECTORY"或"INSTALLLOCATION"不是标准的Windows安装程序属性,因此无法保证它们将存在于每个MSI安装中。
属性指定安装的根目标目录。TARGETDIR 必须是目录表中一个根的名称。可能只有一个根目标目录。
如果定义了 TARGETDIR 属性,则目标目录将解析为该属性的值。如果未定义 TARGETDIR 属性,则使用 ROOTDRIVE 属性来解析路径。
属性指定安装的目标目录的默认驱动器。如果未在命令行中设置 ROOTDRIVE 或未在属性表中创作,安装程序将设置此属性。
在 MSDN 文档中,请参阅
目录表
使用目录表
指定目录结构
更改目录的目标位置