1

.NET でアプリケーションのマニフェストに送信されたクエリ文字列 (GET / POST パラメーター) を解析するにはどうすればよいですか?
1 つのアプリケーションから、.NET アプリケーションをインストールする必要があるものを呼び出しMyApp.applicationています (インストールされていない場合)。いずれにしても、GET パラメータを解析する必要があるアプリケーションを呼び出す必要があります。

後で編集:
ClickOnce 経由でインストールする必要がある .NET アプリケーションがあります。すでに Web サーバーで公開されています。MyApp.applicationアプリケーションの実行は、外部アプリケーション (PHP で記述) からファイルを呼び出すことによって行われます。これは通常、更新をチェックし、必要に応じてアプリケーションをインストールします。次に、アプリケーションを呼び出すため、これは常に外部アプリから呼び出されるファイルです。
外部アプリは、.NET アプリで処理する必要があるこのファイルに GET クエリを介してパラメーターを送信します (これが自動ログインを実装する最も簡単な方法であるため、パラメーターには資格情報が含まれます)。
GET パラメータが に送信される場合、起動するたびにMyApp.applicationそれらを処理するにはどうすればよいですか?MyApp.cs

4

1 に答える 1

2

最初に、クエリ文字列オプションが有効になっていることを確認する必要があります (プロジェクト プロパティ=>発行=>オプション=>マニフェスト=>url パラメーターを許可する...);

次に、スタンドアロンと Web の間のパリティを可能にするために、以下のようなものを使用します (重要な部分はActivationArguments.ActivationDataです。参照も必要ですSystem.Deployment.dll)。

またSystem.Deployment.Application.ApplicationDeployment.CurrentDeployment.ActivationUri、MSDN のこちらの良い例を参照してください。


    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();
    }
于 2008-11-03T08:57:10.030 に答える