Контекстное меню 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 для решения этой проблемы, я обнаружил, что он пытается запустить другую версию моего приложения, которой у меня больше нет на моем компьютере. Я хотел бы знать, почему оно не открывает мое приложение, а пытается загрузить более старую несуществующую.


0 ответов

Другие вопросы по тегам