当目录表中没有名为 "INSTALLDIR" 的目录时,如何从 MSI 读取安装目录 "INSTALLDIRECTORY"



我想读取 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 文档中,请参阅

目录表

使用目录表

指定目录结构

更改目录的目标位置

最新更新