要在安装应用程序中使用的MapPath或等效项

时间:2010-11-22 09:11:59

标签: iis wix custom-action

我需要检查安装应用程序中的.config文件(iis是WIX项目中的自定义操作)。用户选择网站并输入虚拟目录名称。我无法进行http读取以检索配置文件,因为ASP.NET不提供配置文件。

如何找到所选网站和虚拟目录的本地磁盘路径?

2 个答案:

答案 0 :(得分:0)

进一步搜索后,我最终使用了DirectoryServices。我在这里为其他人发布我的解决方案。

如果有更好的方法,请发布。

    static string FindVirtualDirectoryPath(string virtualDirectoryName)
    {
        return FindVirtualDirectoryPath(null, virtualDirectoryName);
    }

    static string FindVirtualDirectoryPath(string siteName, string virtualDirectoryName)
    {
        DirectoryEntry iis = new DirectoryEntry("IIS://localhost/W3SVC");
        foreach (DirectoryEntry index in iis.Children)
        {
            if (index.SchemaClassName == "IIsWebServer")
            {
                int id = Convert.ToInt32(index.Name);
                DirectoryEntry site = new DirectoryEntry(string.Concat("IIS://localhost/W3SVC/", id));
                string iSiteName = site.Properties["ServerComment"].Value.ToString();
                if (iSiteName == siteName || (string.IsNullOrEmpty(siteName) && id == 1))
                {
                    DirectoryEntry rootVDir = new DirectoryEntry(string.Concat("IIS://localhost/W3SVC/", id, "/Root"));
                    foreach (DirectoryEntry vDir in rootVDir.Children)
                    {
                        if (vDir.SchemaClassName == "IIsWebVirtualDir" && vDir.Name.ToLower() == virtualDirectoryName.ToLower())
                        {
                            return vDir.Properties["Path"].Value.ToString();
                        }
                    }
                }
            }
        }
        return null;
    }

答案 1 :(得分:0)

您是否尝试过使用标准WiX IIsExtension?只需捕获属性中的用户输入,然后使用iis:WebSiteiis:WebVirtualDir等标准元素在适当的网站中创建虚拟目录。