Наследовать правильный app.config в программе, запущенной из контекстного меню SharpShell
Я пытаюсь разработать приложение C#, интегрированное с оболочкой Windows, поэтому я использую библиотеку Sharpshell. Я использую библиотеку Sharpshell непосредственно в том же проекте, создавая специальный класс для обработки контекстного меню. Первоначально я связал с событием click в контекстном меню следующую команду:
System.Diagnostics.Process.Start(path, _command.ToString() + "|" + string.Join("|", SelectedItemPaths));
и система работала. Теперь я пытаюсь запустить непосредственно из события Click новый экземпляр класса Program.Main со следующим кодом:
DmsDrive.Program.Main(new string[] { _command.ToString() + "|" + string.Join("|", SelectedItemPaths) });
и istance работает и запускается правильно. проблема в том, что при запуске процесса с помощью этого метода программа ищет файл app.config в каталоге Windows (основной домен currentdomen - это процесс explorer.exe). из-за этого app.config не загружается и контракт с сервисом wcf не работает.
ты знаешь, как я могу справиться с этим? или лучше продолжать использовать метод Process.start?
С уважением.
1 ответ
Я бы порекомендовал запустить процесс напрямую с помощью функции "Запуск процесса" - я думаю, что если я правильно читаю ваше сообщение, вы фактически вызываете функцию "Main" своей программы, что означает, что вы на самом деле не создаете новый процесс. вообще (просто вызывая функцию в процессе Windows Explorer, в которую загружается расширение оболочки). Это означает, что программа, которую вы запускаете, выполняется в процессе оболочки Windows, который не слишком дружелюбен, так как, если он аварийно завершает работу, он может вызвать сбой проводника.
Начните программу с помощью Process start. Если вам нужно настроить способ его подключения, рассмотрите возможность передачи аргументов командной строки в вашу программу (например, адрес службы) и создания привязки клиента WCF вручную (на самом деле, вы можете обнаружить, что, как только вы привыкли к созданию клиентов WCF) программно, они в конфигурационном файле более затянуты и менее интуитивно понятны!)
В качестве последнего варианта, для серьезной излишней архитектуры программного обеспечения Windows, вы можете создать службу Windows, в которой размещается служба "координатор". Контекстное меню оболочки может вызвать службу координатора (говоря "сделай что-нибудь"), и служба может запустить процесс, или процесс может запуститься при запуске и опросить службу, если ему нужно что-то сделать.