0

我想阅读 MSI 的安装目录。当目录表中的“INSTALLDIR”、“INSTALLDIRECTORY”或“INSTALLLOCATION”指定安装目录时,我能够读取安装目录。但是许多 msis 不包含“INSTALLDIR”左右。那么如何确定特定msi的安装目录是什么。

是否有任何特定的关键字列表可用于指定安装目录,因为有些 msi 包含 INSTALLDIR,有些包含 INSTALDIRECTORY,有些包含 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;
                    }
                }
            }

如果 INSTALLDIR 条目不在目录表中,请告知如何获取 MSI 的安装目录。我正在用 C# 编写代码并使用 WiX dll。

4

1 回答 1

2

因为“INSTALLDIR”、“INSTALLDRECTORY”或“INSTALLLOCATION”不是标准的 Windows Installer 属性,所以不能保证它们在每个 msi 安装中都存在。

TARGETDIR属性指定安装的根目标目录。TARGETDIR 必须是 Directory 表中一个根的名称。可能只有一个根目标目录。

如果定义了 TARGETDIR 属性,则将目标目录解析为该属性的值。如果未定义 TARGETDIR 属性,则使用 ROOTDRIVE 属性来解析路径。

ROOTDRIVE属性指定安装目标目录的默认驱动器如果 ROOTDRIVE 未在命令行中设置或未创作到属性表中,则安装程序会设置此属性。

在 MSDN 文档中,请参阅

目录表

使用目录表

指定目录结构

更改目录的目标位置

于 2013-02-04T21:11:12.903 回答