В настоящее время я работаю над Autoupdater для своих приложений. (в сочетании с установщиком, средством обновления и средством удаления)
Я хотел бы настроить все вещи автоматически:
- Вход в начальное меню
- Папка в C:\Program Files\
- Папка конфигурации в данных приложения (в зависимости от роуминга/локальности)
- Удаление программного обеспечения - запись в "Программы и компоненты"
- Ярлык рабочего стола.
Все это работает очень хорошо. Для записи в Program Files и реестр инструменту требуются права администратора ofc. Поэтому я добавил «перезапуск» AppLauncher после того, как выбрано нужное программное обеспечение. Просто что-то вроде этого:
ProcessStartInfo pi = new ProcessStartInfo(Directory.GetCurrentDirectory() + @"\AppLauncher.exe");
pi.Verb = "runas";
pi.Arguments = "install " + this.appItem.APID;
Process p = new Process();
p.StartInfo = pi;
try
{
p.Start();
Application application = Application.Current;
application.Shutdown();
}
catch (Exception ex)
{
MessageBox.Show("Unable to install the application.\n\n" + ex.ToString(), "Error",
application.Shutdown();
}
Также этот шаг работает очень хорошо, если пользователь сохраняет AppLauncher.exe где-то в папке и запускает его, дважды щелкнув по нему.
Если пользователь решает нажать «Выполнить» в браузере, установщик сталкивается с показанным исключением, сообщая, что «AppLauncher.exe» не найден. Я предполагаю, что запуск файла прямо из браузера приведет к настройке другого рабочего каталога и, следовательно,
Directory.GetCurrentDirectory()
не вернет соответствующее значение, где находится файл. Это также может НЕ работать, если пользователь решит дать файлу другое имя.
Итак, что я могу сделать по этому поводу?
Есть ли что-то вроде File.GetCurrentFile(): P