私のアプリケーションは私と同僚専用なので、Click-Once か copy-the-exe かは気にしません。Windows エクスプローラーで特定の拡張子のファイルをクリックし、プログラムを起動してそのファイルを開くことができるようにしたいと考えています。ファイル名を取得できません。
表向きの解決策:
私が試しているコードは以下のとおりです。この時点で私がしようとしているのは、クリックしたファイルの名前をテキスト ボックスに入力することだけです。関連する無知は、Windowsエクスプローラーからクリックワンスアプリケーションを参照する方法についてだと思います。ビルドすると、setup.exe というファイル、Wis.application というファイルが作成されます。[セットアップ] をクリックしてインストールすると、"Click-once application reference" タイプのショートカットが作成されます。 C:\Users\ptom\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Wis". インストールによって作成されたそのショートカットにファイルを関連付け、setup.exe にファイルを関連付けてみました。ファイルをクリックすると、アプリケーションが起動しますが、AppDomain.CurrentDomain.SetupInformation.ActivationArguments が null であることが示されます。(「示す」によって つまり、テキスト ボックスには、null かどうかをテストした場所からのテキストが入力されます)。アプリをデバッグから実行するか、スタート メニューから実行すると、ActivationArguments が null ではなく、その ActivationData (string[]) が長さであることを示すコード パスに従って、期待どおりに動作します。 0.
app.xaml.cs のコードは次のとおりです。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
namespace Wis
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
// Check if this was launched by double-clicking a doc. If so, use that as the
// startup file name.
if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments == null)
{
this.Properties["DoubleClickedFileToLoad"] = "There were no activation arguments AGAIN";
}
else
{
if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null
&& AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length > 0)
{
this.Properties["DoubleClickedFileToLoad"] =
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0];
}
else
{
this.Properties["DoubleClickedFileToLoad"] = "Type in a file name";
}
}
}
}
}
ありがとう