Вы можете использовать следующее, чтобы определить, где реестр считает, что он установлен:
(string)Registry.LocalMachine.GetValue(@"SOFTWARE\MyApplication\AppPath",
"Installed", null);
Или вы можете использовать следующее, чтобы узнать, откуда на самом деле запускается приложение:
System.Windows.Forms.Application.StartupPath
Последний более надежен, чем первый, если вы пытаетесь использовать местоположение .exe
в качестве относительного пути для поиска связанных файлов. Пользователь может легко перемещать вещи после установки и при этом приложение будет работать нормально, поскольку приложения .NET не так зависят от реестра.
Используя StartupPath
, вы можете даже сделать что-то умное, например, заставить ваше приложение обновлять записи реестра во время выполнения, а не сбоить из-за отсутствия / неправильных / поврежденных записей.
И обязательно посмотрите на функциональность настроек приложения как хранилище значений, а не как реестр (Properties.Settings.Default.mySettingEtc
). Вы можете читать / записывать настройки для приложения и / или пользовательских уровней, которые сохраняются в виде простых файлов MyApp.exe.config
в стандартных местах. Хороший взрыв из прошлого (старые добрые времена Win 3.1 / DOS), когда установка / удаление приложения была простой копией / удалением структуры папок или двух, а не какой-то сложной запутанной подпрограммой установки / удаления, которая оставляет все виды мусора в реестре и посыпать всем жестким диском.