Если вы наберете «regedit» в поле редактирования меню «Пуск» и нажмете клавишу Enter, будет запущен редактор реестра. То же самое верно для «cmd» и командной строки, и, несомненно, для некоторых других приложений.

Как я могу заставить мое приложение реагировать таким же образом, чтобы, если пользователь вводит «Утконос» в поле редактирования меню «Пуск», запускался Platypus.exe?

Требуется ли манипулирование реестром / добавление записи где-то там, и если да, то какой ключ и значение нужно добавить?

Я был бы удовлетворен, если бы пользователю нужно было запустить приложение вручную один раз (2 щелчка по его значку; это приложение Winforms), и в это время код запуска (без каламбура) будет делать все, что необходимо для того, чтобы приложение впредь было запускаемым (Windows клавишу "Утконос", чтобы запустить приложение).

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

ОБНОВИТЬ

Я добавил код, рекомендованный Чанданом (с именем моего исполняемого файла):

public static void AddToStartup()
{
    using (RegistryKey startup = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
    {
        startup.SetValue("RoboReporter", "\"" + System.Windows.Forms.Application.ExecutablePath + "\"");
    }
} 

... вызвал его из события загрузки основной формы:

private void FormRoboReporter_Load(object sender, EventArgs e)
{
    RoboReporterConstsAndUtils.AddToStartup();
}

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

ОБНОВЛЕНИЕ 2

Что он делает, так это заставляет мое приложение запускаться при перезапуске компьютера. Я не этого хочу. Приведенный выше код добавляет запись в HKEY_CURRENT_USER.Software.Microsoft.Windows.CurrentVersion.Run, как можно увидеть здесь (вместе с парой других записей, предшествующих этому):

enter image description here

Я не хочу, чтобы приложение запускалось каждый раз при перезагрузке компьютера, поэтому я удалил запись. Остается вопрос: как сделать приложение запускаемым из меню «Пуск»?

1
B. Clay Shannon 14 Май 2016 в 01:54

2 ответа

Лучший ответ

Вы можете добавить путь родительского каталога вашего приложения к переменной окружения PATH.

string pathvar = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("PATH", pathvar + ";" + Application.StartupPath + "\\", EnvironmentVariableTarget.Machine);

(Обратите внимание, что пути, добавленные к этой переменной, должны заканчиваться обратной косой чертой \, и каждый путь отделяется точкой с запятой ;)

Добавление пути родительского каталога к переменной среды сделает все его содержимое быстро доступным из поля поиска меню «Пуск», из Run и из CMD.

Вы также можете изменить EnvironmentVariableTarget.Machine на EnvironmentVariableTarget.User, чтобы изменить переменную только для текущего пользователя.


РЕДАКТИРОВАТЬ:

Примечание: установка переменной для всей машины (с помощью EnvironmentVariableTarget.Machine), похоже, требует повышенных привилегий, если выполняется из одного приложения.

4
Visual Vincent 13 Май 2016 в 23:41

Вы можете захотеть запустить это

public static void AddToStartup()
{
    using (RegistryKey startup = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
    {
        startup.SetValue("Name_of_your_Program", "\"" + Application.ExecutablePath + "\"");
    }
}
1
Chandan Gupta 14 Май 2016 в 01:56