Frage
Wie kann ich den Abfrage-String (GET / POST-Parameter) zu analysieren, um eine Anwendung Manifest in .NET geschickt?
Von einer Anwendung nenne ich MyApp.application
die meine .NET-Anwendung installieren muss (falls installiert) und in jedem Fall sollte es die Anwendung aufrufen, die die GET-Parameter analysieren sollte.
Später bearbeiten:
Ich habe eine .NET-Anwendung, die über Clickonce installiert werden soll. Es ist bereits auf einem Webserver veröffentlicht. Die Ausführung der Anwendung wird durch den Aufruf der MyApp.application
Datei von einer externen Anwendung (geschrieben in PHP) getan. Diese prüft normalerweise für Updates und installiert die Anwendung bei Bedarf, dann ruft er die Anwendung so dass diese die Datei ist, die immer von der externen Anwendung aufgerufen werden.
Die externe App sendet Parameter über eine GET-Abfrage auf diese Datei, die in dem .NET-App bearbeitet werden soll (die Parameter umfassen Berechtigungsinformationen, da dies der einfachste Weg, ich die automatische Anmeldung implementieren sehen).
Wenn die GET-Parameter zu MyApp.application
gesendet werden, wie kann ich sie in MyApp.cs
verarbeiten jedes Mal, es gestartet wird?
Lösung
Als erstes müssen Sie die Optionen Query-String gewährleisten aktiviert sind (Projekteigenschaften => veröffentlichen => Optionen => manifestiert => URL-Parameter erlauben ...);
. Dann - ermöglichen Parität zwischen eigenständigen und Web, ich so etwas wie unten verwenden (das wichtige Bit ist ActivationArguments.ActivationData
, du wirst einen Verweis benötigen auch System.Deployment.dll
)
Sie auch bei System.Deployment.Application.ApplicationDeployment.CurrentDeployment.ActivationUri
aussehen könnten, die MSDN ein gutes Beispiel hat hier .
public static string[] GetStartupArguments() {
List<string> allOptions = new List<string>();
try // command line
{
string[] options = System.Environment.GetCommandLineArgs();
if (options != null) { // strip the first (the exe name)
int length = options.Length;
for (int i = 1; i < length; i++)
allOptions.Add(options[i]);
}
} catch { } // lazy swallow
try // query string
{
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) {
string[] options = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
if (options != null && options.Length > 0) {
foreach (string queryItem in new Uri(options[0]).Query.TrimStart('?').Split('&')) {
allOptions.Add(System.Web.HttpUtility.UrlDecode(queryItem));
}
}
}
} catch { } // lazy swallow
return allOptions.ToArray();
}