2009-05-26 3 views
0

Gibt es eine zuverlässige, elegante Methode, um festzustellen, ob die aktuelle App eine Gewinn- oder Webformularanwendung (oder eine andere Anwendung) ist?Ermitteln von Gewinn- oder Webformularen

Wir haben eine gemeinsame Konfigurationsklasse, die entweder app.config oder web.config öffnen muss.

Momentan erhalte ich ArgumentException, wenn ich OpenExeConfiguration versuche, aber es ist nicht sehr elegant und könnte andere Probleme maskieren.

Antwort

3

ich in der Regel überprüfen, ob ein Httpcontext verfügbar gibt es (wenn es da in einem Web Service eine Web Application ist HttpContenxt.Current null ist) Um dies zu tun, Sie System.Web zu Ihren Referenzen hinzufügen sollten.

if(HttpContext.Current!=null) 
//It's a web application 
else 
//it's a win application 
+0

Danke, das ist, was ich gesucht habe –

1

Versuchen Sie die Abhängigkeitsinjektion, so dass die Config-Klasse keine switch-Anweisung ausführen muss.

0

könnten Sie versuchen, die Ausführung Prozess über Process.GetCurrentProcess() bekommen, vielleicht könnten Sie überprüfen die Process.MainWindowHandle nicht IntPtr.Zero ist, oder überprüfen Sie den Prozessnamen oder potenziell scannen, um die geladenen Module des Prozesses. Dies hätte den Vorteil, dass Sie keine Assemblys laden müssen, die für Ihren aktuellen Ausführungskontext nicht erforderlich sind (z. B. System.Windows.Forms.dll nicht laden, wenn diese App eine Webanwendung ist).

Allerdings scheint dies unelegant.

+0

Dank Phil, würde dies fehlschlagen, wenn es ein Service ist, obwohl der Service auch keine MainWindowHandle hat. Ich wollte vermeiden, den laufenden Prozess zu verhören, da es ziemlich hacky aussieht. –