MapPath или эквивалент для использования в приложении установки - PullRequest
0 голосов
/ 22 ноября 2010

Мне нужно проверить файл .config в установочном приложении (пользовательское действие iis в проекте WIX).Пользователь выбирает веб-сайт и вводит имя виртуального каталога.Не удается выполнить чтение http для получения файла конфигурации, поскольку ASP.NET не обслуживает файлы конфигурации.

Как найти путь к локальному диску выбранного веб-сайта и виртуального каталога?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2010

Вы пытались использовать для этого стандартный WiX IIsExtension ?Просто сохраните пользовательский ввод в свойстве, а затем используйте стандартные элементы, такие как iis: WebSite и iis: WebVirtualDir , чтобы создать виртуальный каталог на соответствующем веб-сайте.

0 голосов
/ 22 ноября 2010

После дальнейшего поиска я в конечном итоге использовал 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;
    }
...