WCFを使用して作成された "MyService"と呼ばれる簡単なWindowsサービスがあり、起動時に "HKEY_CLASSES_ROOT \ Folder \ Shell \ { ContextMenuEntryName} "という名前のエントリを持つように、ウィンドウ内の任意の場所にある右クリックメニューを許可します。このエントリをクリックすると実行されるターゲットは別のプログラムである。 "{パス} \ serviceclient.exe%1" "%1"は、そのコンテキストメニューが呼び出されたWindowsフォルダのパスを表示します。このプログラムは、その値を受け取り、サービスのプロキシを作成してそのメソッドを呼び出すことで、サービスに渡します。コンテキストメニュー項目を実行している間にWindowsサービスにパラメータを渡す
次のようにそのOnStartメソッドメソッドのためのWindowsサービスコードは次のとおりです。
protected override void OnStart(string[] args)
{
if (_serviceHost != null)
{
_serviceHost.Close();
}
// Add registry entry for context menu option System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
string contextMenuCommandPath =
Environment.CurrentDirectory.Substring(0, Environment.CurrentDirectory.IndexOf("MyService")) +
"serviceclient\\bin\\Debug\\serviceclient.exe %1";
_contextMenu.AddContextMenu(ContextMenuName, contextMenuCommandPath, "Folder");
_contextMenu.AddContextMenu(ContextMenuName, contextMenuCommandPath, "*");
// Create a ServiceHost for the CalculatorService type and
// provide the base address.
_serviceHost = new ServiceHost(typeof(MyService));
// Open the ServiceHostBase to create listeners and start
// listening for messages.
_serviceHost.Open();
}
serviceclient.exeがそれに「MYSERVICE」という名前のサービス参照を追加した後、次のコードを持っています
// Instantiate service proxy
var myServiceClient = new MyService.MyServiceClient();
// Execute monitor target based on path specified (or default).
myServiceClient .Monitor(args.Length > 0 ? args[0] : string.Empty);
私は同じことをする別の別のプログラムを呼び出すのではなく、コンテキストメニューの項目をクリックすると、Windowsサービス自体に引数を直接渡したいと考えています。
コンテキストメニュー項目を実行しているときにWCFのWindowsサービスに情報を直接渡すことは可能でしょうか?
@TrueWill:WindowsサービスはWCFサービスをホストできます。これは、オペアンプが使用しているようです。 .exeは彼がWCFサービスを呼び出すことを間違いなく開始する。 –
@ジョン:TrueWillのことを明確にしてくれてありがとう。はい、WCFサービスは、WindowsサービスまたはWebサービスのいずれかです。私は前者を作りました。私はWCFサービスをWindowsサービスにラップしていますが、これは私が処理しようとしているものです。 – Cranialsurge
実際には、WCFサービスは両方とも可能です。 WindowsサービスでHTTPバインディングを使用するWCFサービスをホストできます。 –