Контекстное меню SharpShell, Process.Start() не может найти указанный файл. (Пытается загрузить другое приложение)
TL;DR дружественный
Мое приложение не загружается из контекстного меню с ошибкой "Система не может найти указанный файл". Я пробовал другое имя файла в Process.Start. Кроме того, с помощью Process Monitor я обнаружил, что он пытается запустить другую версию моего приложения, которой больше нет на моем компьютере.
Я создал расширение Sharpshell для своего приложения, которое я устанавливаю с помощью набора инструментов WiX. Я могу создать контекстное меню для всех файлов, но когда я нажимаю на любой из пунктов контекстного меню, которые должны запускаться с моим приложением, я получаю диалоговое окно, в котором система не может найти указанный файл.
После ответа на Установка и регистрация расширения оболочки. Контекстное меню из установщика wix и учебное пособие по адресу https://www.codeproject.com/Articles/653780/NET-Shell-Extensions-Deploying-SharpShell-Servers, я создал пользовательские действия, зарегистрироваться с помощью srm.exe и может правильно отображать контекстное меню.
Я не могу запустить приложение через контекстное меню.
Вот мой код в contextmenu.cs:
[ComVisible(true)]
[COMServerAssociation(AssociationType.AllFiles)]
[COMServerAssociation(AssociationType.Directory)]
public class MyContextMenu : SharpContextMenu{
protected override bool CanShowMenu() {
return true;
}
protected override ContextMenuStrip CreateMenu() {
ContextMenuStrip menu = new ContextMenuStrip();
ToolStripMenuItem rootItem = new ToolStripMenuItem("MyApp", Resources.AppImg);
// ...
ToolStripMenuItem runItem= new ToolStripMenuItem("run", Resources.RunImg)
runItem.Click += Run_Click;
rootItem.DropDownItems.Add(runItem);
// ...
menu.Items.Add(condor);
return menu;
}
}
private void Run_Click(object sender, EventArgs e){
Run("run");
}
private void Run(string action){
ProcessStartInfo myapp = new ProcessStartInfo();
myapp.Verp = "open";
myapp.FileName = "myapp.exe";
foreach(string path in SelectedItemPaths){
action += string.Format(" \"{0}\"", path);
}
myapp.Arguments = action;
try {
Process.Start(myapp);
} catch (Exception e) {
MessageBox.Show(e.Message);
}
}
Исключение выдается, когда я пытаюсь запустить приложение
Process.Start(MyApp);
где исключение - система не может найти указанный файл. Невозможно загрузить myapp.FileName
Изменить: протестировал расширение моей оболочки с помощью диспетчера сервера, и он работает нормально, а также имеет запись в реестре, но все еще не может запустить мое приложение из контекстного меню
Любая помощь будет оценена
Обновление: пытаясь решить эту проблему, я попытался использовать этот код, чтобы просто запустить командную строку:
private void Run(string action) {
ProcessStartInfo myapp = new ProcessStartInfo();
myapp.FileName = "cmd.exe";
try {
Process.Start(myapp);
} catch (Exception e) {
MessageBox.Show(e.Message);
}
}
Тем не менее, я получаю то же диалоговое окно, которое говорит, что система не может найти указанный файл.
Используя Process Monitor для решения этой проблемы, я обнаружил, что он пытается запустить другую версию моего приложения, которой у меня больше нет на моем компьютере. Я хотел бы знать, почему оно не открывает мое приложение, а пытается загрузить более старую несуществующую.