2012-02-20 4 views
3

Мне было интересно, удалось ли в Delphi реализовать некоторые элементы, добавленные в контекстное меню EXE-файла, в частности, приложение EXE-приложения Windows, которое еще не было зарегистрировано или установлено нигде , Параметры меню позволят пользователю установить/удалить EXE в качестве службы Windows. Это возможно? Если да, то как? Все в порядке, если оно совместимо только с Windows Vista +.Щелкните правой кнопкой мыши меню EXE-файла

Там будут 2 пунктов меню:

  • Установка (или удаление)
  • Start (или Stop)
+0

отдельные файлы не объявлять информацию для меню правой кнопкой мыши Windows, для отображения. вы спрашиваете, как это сделать для одного конкретного исполняемого файла? – ardnew

+3

Почему downvote? Это совершенно правильный вопрос. –

+0

@ LeonardoHerrera Согласовано - вопрос о том, возможно ли что-то с ответом «нет», не означает, что он должен быть опущен. –

ответ

5

Если вы имеете в виду контекстное меню Shell (окно правой кнопкой мыши в проводнике Windows), вы не можете. Вы можете добавить в меню, которое будет отображаться для всех файлов .exe, но не для отдельного.

Вы можете зарегистрировать обработчик контекстного меню для всех исполняемых файлов, а затем процеживают имя файла передается, чтобы увидеть, если вам необходимо, чтобы справиться с этим или нет, но это означало бы, что для каждого из сотен (или тысяч) исполняемые файлы на вашем компьютере, ваш фильтр будет работать на тонком случайности, когда это приложение было нажато правой кнопкой мыши.

Возможным обходным решением было бы разместить файл с пользовательским расширением в папке службы и вместо этого добавить обработчик контекстного меню для этого файла. Когда этот файл щелкнет правой кнопкой мыши, пункты меню просто вызовут вашу службу с соответствующими параметрами командной строки.

(Конечно, лучшим решением является использование апплета Services в панели управления для управления службой, которая является то, что он разработан специально делать делать.)

+0

Кроме того, перед контекстным меню вы должны установить расширение оболочки. Это означает, что вам нужно будет установить установщик для определенного файла? – martinstoeckli

+0

Хорошая точка. Я даже не потрудился продумать это до того, как решил, что это плохая идея. :) –

+0

Итак, в конце концов, на самом деле ответ «да», но с ужасными последствиями, так что на самом деле ответ очень не рекомендуется. –

3
+1

Нет, это не так. Вы не можете добавить в контекстное меню для конкретного исполняемого файла. Вы можете добавить один для * all * исполняемых файлов, но не для отдельного. –

+0

Я не думаю, что это невозможно, http://www.codeproject.com/Articles/441/The-Complete-Idiot-s-Guide-to-Writing-Shell-Extens Из этой статьи это означает, что вы можете фильтровать имена файлов. –

+2

Конечно. Это означает, что для каждого отдельного исполняемого файла в вашей системе, который был щелкнут правой кнопкой мыши, ваше расширение вызывается, и при запуске фильтра есть задержка в системе. Выполнение чего-то глупого - это полная потеря системных ресурсов и негативное воздействие на всю систему. Нет * практического * способа добавить контекстное меню для одного файла. (Более практичным решением было бы поместить отдельный файл в папку вашей службы, зарегистрировать обработчик для расширения этого отдельного файла и настроить вашу службу как обработчик для этого расширения нового файла.) –

Смежные вопросы