我想阅读MSI的安装目录。当目录表中的“INSTALLDIR”,“INSTALLDIRECTORY”或“INSTALLLOCATION”指定安装目录时,我能够读取安装目录。但许多msis不包含“INSTALLDIR”左右。然后如何确定特定msi的安装目录是什么。
是否有任何特定的关键字列表可用于指定安装目录,因为有些msi包含INSTALLDIR,有些包含INSTALLDIRECTORY或某些包含INSTALLLOCATION。
我正在使用以下代码snipet来获取安装目录
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;
}
}
}
如果INSTALLDIR条目不在目录表中,请告知如何获取MSI的安装目录。我正在用C#编写代码并使用WiX dll。
答案 0 :(得分:2)
因为“INSTALLDIR”,“INSTALLDIRECTORY”或“INSTALLLOCATION”不是standard Windows Installer properties,所以不能保证它们将存在于每个msi安装中。
TARGETDIR属性指定安装的根目标目录。 TARGETDIR必须是Directory表中一个根的名称。可能只有一个根目标目录。
如果定义了TARGETDIR属性,则目标目录将解析为属性的值。如果未定义TARGETDIR属性,则使用ROOTDRIVE属性来解析路径。
ROOTDRIVE属性指定安装目标目录的默认驱动器。如果未在命令行中设置ROOTDRIVE或将其创作到Property表中,则安装程序会设置此属性。
在MSDN文档中,请参阅