Programmgesteuertes Starten und Beenden von IIS Express
Ich versuche zu bauen, ein kleines Programm in C# welches sollte starten/beenden von IIS Express Arbeitsprozess. Für diesen Zweck möchte ich die offizielle "IIS Express API", welches auf MSDN dokumentiert: http://msdn.microsoft.com/en-us/library/gg418415.aspx
Soweit ich das verstanden habe, ist die API basiert (nur) auf COM-Schnittstellen. Benutzen Sie diese COM-Schnittstellen habe ich einen Verweis auf die COM-Bibliothek in VS2010 über Verweis Hinzufügen -> COM -> "IIS-Versionen Installiert-Manager-Schnittstelle":
So weit So gut, aber was kommt als Nächstes? Es ist ein IIISExprProcessUtility
- Schnittstelle zur Verfügung, die beinhaltet das die beiden "Methoden" zum starten/stoppen der IIS-Prozess. Muss ich eine Klasse schreiben, die diese Schnittstelle implementiert?
public class test : IISVersionManagerLibrary.IIISExprProcessUtility
{
public string ConstructCommandLine(string bstrSite, string bstrApplication, string bstrApplicationPool, string bstrConfigPath)
{
throw new NotImplementedException();
}
public uint GetRunningProcessForSite(string bstrSite, string bstrApplication, string bstrApplicationPool, string bstrConfigPath)
{
throw new NotImplementedException();
}
public void StopProcess(uint dwPid)
{
throw new NotImplementedException();
}
}
Wie Sie sehen können, ich bin kein professioneller Entwickler. Kann mir jemand zeigen in die richtige Richtung.
Jede Hilfe wird sehr geschätzt.
Update 1:
Entsprechend der Ratschläge habe ich versucht den folgenden code der leider nicht funktioniert:
Ok, es kann instanziiert werden aber ich kann nicht sehen, wie dieses Objekt...
IISVersionManagerLibrary.IIISExpressProcessUtility test3 = (IISVersionManagerLibrary.IIISExpressProcessUtility) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("5A081F08-E4FA-45CC-A8EA-5C8A7B51727C")));
Exception: Retrieving the COM class factory for component with CLSID {5A081F08-E4FA-45CC-A8EA-5C8A7B51727C} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
InformationsquelleAutor der Frage Mike | 2011-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich versuche zu tun, ähnliche Sache. Ich habe festgestellt, dass die COM-Bibliothek von Microsoft bereitgestellt, ist unvollständig. Ich benutze es nicht, weil der doc erwähnt, dass "Hinweis: Dieses Thema ist pre-release-Dokumentation und unterliegt in zukünftigen Versionen ändern".
So, ich beschloss, nehmen einen Blick an, was IISExpressTray.exe tut. Es scheint, zu tun ähnliche Dinge.
Ich zerlegen die IISExpressTray.dll und festgestellt, dass es keine Magie in der Auflistung alle IISexpress Prozesse und Stoppt den IISexpress Prozess.
Es nicht an, dass die COM-Bibliothek. Es spielt keine lookup-alles aus der Registrierung.
So, die Lösung, die ich endete up ist sehr einfach. Zum starten des IIS express Prozess, ich habe gerade mit dem Prozess.Start() auf und übergeben alle Parameter, die ich brauche.
Stoppen IIS express Prozess, kopierte ich den code aus IISExpressTray.dll mit dem Reflektor. Ich sah es sendet einfach eine WM_QUIT-Nachricht an die Ziel-IISExpress Prozess.
Hier ist die Klasse, die ich schrieb, um zu starten und beenden Sie IIS express Prozess. Hoffe, dies kann helfen, jemand anderes.
Ich nicht brauchen, um eine Liste aller vorhandenen IIS express Prozess. Wenn Sie das brauchen, von dem, was ich sah in den Reflektor, was IISExpressTray.dll tut, ist zu nennen
Process.GetProcessByName("iisexpress", ".")
Verwendung der Klasse I zur Verfügung gestellt, hier ist ein Beispiel-Programm, das ich verwendet, um es zu testen.
Dies ist vielleicht nicht die Antwort auf deine Frage, aber ich glaube, die Leute interessant, die in Ihrer Frage können meine Arbeit für nützlich. Fühlen Sie sich frei, um die Verbesserung der codes. Es gibt einige Orte, die Sie vielleicht zu verbessern.
InformationsquelleAutor der Antwort Harvey Kwok
Obwohl, es ist zu spät, ich werde eine Antwort auf diese Frage.
Das ist es. Dann können Sie anrufen StopProcess Methode util-Objekt.
Jedoch, Sie haben, um Mitteilung von Microsoft.
InformationsquelleAutor der Antwort SeongTae Jeong
Diese Umsetzung arbeitet für das starten/stoppen der IIS-Express programmgesteuert verwendet werden können von tests.
InformationsquelleAutor der Antwort Mharlin
Ich glauben, Sie tun es in einem harten Weg. Nehmen Sie einen Tipp aus dieser Frage Automatisch stoppen/neu starten ASP.NET Entwicklung Server auf zu Bauen und sehen Sie, wenn Sie annehmen können, um den gleichen Prozess.
Deine Frage zu beantworten, ich denke, pinvoke.net die Ihnen helfen könnten. Sie haben viele Beispiele, wie gut die Ihnen helfen können, Ihre Lösung.
InformationsquelleAutor der Antwort Pradeep
Harvey Kwok hatte einen guten Tipp, denn ich möchte zu zerreißen und reißen den Dienst beim ausführen der integration-test-Fällen. Aber Harvey codes ist zu lang mit PInvoke und messaging.
Hier eine alternative.
Und in meinem integration-test-Anzug mit MS-Test, ich habe
InformationsquelleAutor der Antwort ZZZ
Nicht, Sie nicht Erben die Schnittstelle. Sie erstellen eine Instanz der IISVersionManager mit der neue Schlüsselwort. Wie bekommt man eine Referenz auf ein IIISExpressProcessUtility Instanz ist völlig unklar. Die MSDN-Doku ist schrecklich. Vielleicht können Sie neueaber es sieht nicht wie es unterstützt wird.
InformationsquelleAutor der Antwort Hans Passant
Wenn Sie das web ändern.config-Datei der web-Anwendung, IIS (einschließlich Express) starten Sie den app-pool. Dies ermöglicht es Ihnen zum bereitstellen von aktualisierten Baugruppen.
Eine Möglichkeit zum modifizieren der web.config ist für das kopieren in eine neue Datei, und bewegen Sie ihn dann wieder.
Können Sie mehr Kontrolle über IIS Express als einfach Neustart der app pool. Aber wenn es das ist alles, was Sie brauchen, das wird funktionieren.
InformationsquelleAutor der Antwort Michael L Perry
Habe ich angenommen, eine andere Lösung. Sie können nur töten die Prozess-Struktur mit "taskkill" und der name des Prozesses.
Das klappt perfekt, lokal und auf TFS 2013
InformationsquelleAutor der Antwort Raffaeu
Figur würd ich werfe meine Lösung hier auch. Abgeleitet aus der SeongTae Jeong-Lösung und einem anderen post (Kann mich nicht erinnern, jetzt wo).
Microsoft.Web.Administration
nuget.IIS Installed Versions Manager Interface
COM-Typ-Bibliothek, wie oben beschrieben.Fügen Sie die folgende Klasse:
Einrichtung Ihres test-Vorrichtung wie folgt. Der Pfad ist relativ zum bin-Ordner des test-suite.
Und einen Punkt mehr, ob das alles auch auf einen server zu bauen. Zuerst müssen Sie installieren Sie IIS Express auf dem server zu bauen. Zweitens, müssen Sie erstellen eine
applicationhost.config
auf dem build-server. Sie können kopieren Sie diese von Ihrem dev-box unterC:\Users\<User>\Documents\IISExpress\config\
. Es muss kopiert werden, um den entsprechenden Pfad von dem user Ihre build-server ausgeführt wird. Wenn es als "system" ausgeführt, dann wäre der PfadC:\Windows\System32\config\systemprofile\Documents\IISExpress\config\
.InformationsquelleAutor der Antwort hcoverlambda
Hier ist meine Lösung auch. Es läuft IIS Express mit versteckten Fenstern. Manager-Klasse steuert mehrere IIS-Express-Instanzen.
Ich brauche mehrere Instanzen. Entworfen manager-Klasse zu kontrollieren.
InformationsquelleAutor der Antwort user2809176