0

このブログを使用して、引数をオフラインのクリック ワンス アプリケーションに渡そうとしました。ブログの下部近くに、ダウンロードするサンプル プログラムがあります。C#版のプログラム「TestRunningWithArgs」をダウンロードして公開しました。

今、動作していないアプリケーションに引数を渡そうとしています。「引数が渡されませんでした」と言い続けます。

次のコードを使用して引数を渡そうとしています:

shellexecute("File Path\My Applicaiton.application","MyArgument")

このコードはアプリケーションを実行しますが、サンプル アプリケーションは引数を受け取っていないと述べています。言語はビジュアル ベーシック (おそらく 4 または 6?) です。

以下のコードは機能し、Internet Explorer を実行して特定のファイルを共有ポイントから開くことができます。

shellexecute("C:\Program Files\Internet Explorer\iexplore.exe",FileLocation)

私が見る唯一のものは、1回のクリックが.applicationファイルと.exeであるということです。これを機能させる方法はありますか?

以下は、クリック ワンス アプリケーションのコードです。ブログで提供されているサンプル プログラムからコピーしたものです。

public partial class MainForm : Form
{
public MainForm()
{
    InitializeComponent();
    GetArgsToShow();
}

/// Get the arguments and show them on the screen.
private void GetArgsToShow()
{
    //   Get the ActivationArguments from the SetupInformation property of the domain.
    string[] activationData = 
      AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;

    if (activationData != null && activationData.Length > 0)
    {
        //querystring starts with ?; file association starts with "file:"
        if (activationData.Length == 1 && activationData[0].Substring(0, 1) == "?")
        {
            ProcessQueryString(activationData);
        }
        else if (activationData.Length == 1 && activationData[0].Length >= 5 && activationData[0].Substring(0,5).ToLower() == @"file:")
        {
            ProcessFileAssociation(activationData);
        }
        else 
        {
            ProcessCSVParameters(activationData);
        }
    }
    else
    {
        if (activationData == null)
        {
            lstArgs.Items.Add("No arguments passed in.");
        }
        else
        {
            lstArgs.Items.Add(String.Format("Number of args = {0}", activationData.Length));
        }
    }

}

/// Convert a query string into Name/Value pairs and process it.
private void ProcessQueryString(string[] activationData)
{
    NameValueCollection nvc = 
      System.Web.HttpUtility.ParseQueryString(activationData[0]);

    //Get all the keys in the collection, then pull the values for each of them.
    //I'm only passing each key once, with one value.
    string[] theKeys = nvc.AllKeys;
    foreach (string theKey in theKeys)
    {
        string[] theValue = nvc.GetValues(theKey);
        lstArgs.Items.Add(string.Format("Key = {0}, Value = {1}", theKey, theValue[0]));
    }                   
}

/// Process what you would get if you set up a file association, 
/// and the user double-clicked on one of the associated file.
private void ProcessFileAssociation(string[] activationData)
{
    //This is what you get when you set up a file association and the user double-clicks 
    //  on an associated file. 
    Uri uri = new Uri(activationData[0]);
    lstArgs.Items.Add(uri.LocalPath.ToString());
}

/// Process a comma-delimited string of values. Not: can't have spaces or double-quotes in the string,
/// it will only read the first argument.
private void ProcessCSVParameters(string[] activationData)
{
    //I have to say here that I've only ever seen 1 entry passed in activationData,
    //  but I'm checking for multiples just in case. 
    //This takes each entry and splits it by comma and separates them into separate entries.

    char[] myComma = { ',' };

    foreach (string arg in activationData)
    {
        string[] myList = activationData[0].Split(myComma, StringSplitOptions.RemoveEmptyEntries);
        foreach (string oneItem in myList)
            lstArgs.Items.Add(oneItem);
    }
}
}

編集 「C:\Users\userName\AppData\Local\Apps\2.0\5G9CGPWV.6O3\X7YPB07N.2Q2\test..tion_0000000000000000_0001.0000_03232931d88a66c9\」にある.exeにアクセスしようとしましたが、うまくいきませんでした。

4

1 に答える 1