2010-11-22 9 views
0

Ich muss eine .config-Datei in einer Installationsanwendung prüfen (dies ist eine benutzerdefinierte Aktion in einem WIX-Projekt). Der Benutzer wählt eine Website aus und gibt einen virtuellen Verzeichnisnamen ein. Ich kann ein HTTP-Lesen nicht ausführen, um die Konfigurationsdatei abzurufen, da ASP.NET keine Konfigurationsdateien bereitstellt.MapPath oder Äquivalent zur Verwendung in einer Installationsanwendung

Wie kann ich den lokalen Festplattenpfad der ausgewählten Website und des virtuellen Verzeichnisses finden?

Antwort

0

Nach weiterer Suche habe ich DirectoryServices verwendet. Ich poste meine Lösung hier für andere.

Wenn es einen besseren Weg gibt, bitte posten Sie es noch.

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; 
    } 
0

Haben Sie versucht, den Standard WiX IIsExtension für diese Verwendung? Erfassen Sie die Benutzereingabe in einer Eigenschaft und verwenden Sie dann Standardelemente wie iis:WebSite und iis:WebVirtualDir, um ein virtuelles Verzeichnis auf der entsprechenden Website zu erstellen.

Verwandte Themen