У меня есть простая служба Windows, называемая, скажем, «MyService», построенная с использованием WCF, которая при запуске добавляет запись реестра в «HKEY_CLASSES_ROOT \ Folder \ Shell \ {ContextMenuEntryName}», таким образом позволяя меню правой кнопки мыши в любом месте окна иметьзапись с именем: {ContextMenuEntryName}.Целью, выполняемой при нажатии на эту запись, является другая программа, например "{Path} \ serviceclient.exe% 1".«% 1» дает мне путь к папке Windows, в которую было вызвано это контекстное меню.Затем эта программа принимает это значение и передает его моей службе, создав прокси службы и вызвав ее метод.
Код WindowsService для его метода OnStart выглядит следующим образом:
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();
}
После добавления ссылки на службу «MyService» файл serviceclient.exe имеет следующий код:
// 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, когда я щелкаю вместо элемента контекстного меню.вызова другой отдельной программы, которая делает то же самое.
Возможно ли, чтобы пункт контекстного меню непосредственно передавал информацию службе Windows в WCF во время ее работы?