Приложение автоматического обновления Windows 7 UAC - PullRequest
1 голос
/ 29 октября 2010

У нас есть набор приложений, который мы обновляем через собственное приложение «Автообновление».Это приложение в основном подключается к нашему «Серверу обновлений» и загружает файлы для перезаписи, обновления или даже добавления новых функций / приложений в наш пакет приложений.Однако это не очень хорошо работает с UAC.Наше приложение автоматического обновления представляет собой приложение командной строки .NET, которое запускается через ключ реестра HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run.

Проблема, которая возникает у нас, заключается в том, что когда UAC включен, наше приложениеТ беги.Он также не побуждает пользователей запускать программу.Какие варианты можно обойти или решить проблему?

Ниже приведены варианты , а не :1. Выключите UAC - Политика компании2. Используйте ClickOnce - не поддерживает наши потребности (именно поэтому мы стали доморощенными)

Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 30 октября 2010

Вы можете запросить повышение UAC в манифесте приложения .Если вы укажете requireAdministrator, он вызовет UAC, если политика компьютера не запрещает запросы UAC.

3 голосов
/ 30 октября 2010

Вы впереди игры, потому что ваш апдейтер - отдельный exe. В дополнение к добавлению манифеста на него, как предлагает @Martin, в идеале вы также должны изменить пользовательский интерфейс основного приложения. Либо включите кнопку / пункт меню с надписью «Применить обновления», либо откройте модальный пользовательский интерфейс с надписью «Обязательные обновления готовы, нажмите ОК для продолжения». Затем на кнопке или пункте меню или ОК модального пользовательского интерфейса украсьте щитом . Это напоминает пользователям, что они получат приглашение UAC.

Без этого ваш код будет работать нормально, но они будут поражены. Они используют приложение, контролируют ядерный реактор или утверждают счета расходов или что-то еще, и вдруг - бля! - экран становится черным, и они получают подсказку - на нем есть exe-имя, но никто его не читает, и это может ничего не объяснить.

UAC prompt

Есть большая вероятность, что это незапрошенное приглашение UAC не получит согласия пользователя. Поэтому лучше изменить свой пользовательский интерфейс, чтобы объяснить это им.

2 голосов
/ 22 июня 2011

В идеале вы должны использовать MSI в качестве установщика / обновителя - он знает, если / как повысить.

Другое ваше решение - ShellExecute ваш обновитель с привилегиями администратора:

RunAsAsAdmin("C:\Users\Adam\AppData\Temp\ISW-1864.exe");

Где RunAsAdmin - это код, который знает, как выполнить процесс и повысить его в процессе:

function RunAsAdmin(hWnd: HWND; filename: string; Parameters: string): Boolean;
{
    See Step 3: Redesign for UAC Compatibility (UAC)
    http://msdn.microsoft.com/en-us/library/bb756922.aspx
}
var
    sei: TShellExecuteInfo;
begin
    ZeroMemory(@sei, SizeOf(sei));
    sei.cbSize := SizeOf(TShellExecuteInfo);
    sei.Wnd := hwnd;
    sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
    sei.lpVerb := PChar('runas');
    sei.lpFile := PChar(Filename); // PAnsiChar;
    if parameters <> '' then
        sei.lpParameters := PChar(parameters); // PAnsiChar;
    sei.nShow := SW_SHOWNORMAL; //Integer;

    Result := ShellExecuteEx(@sei);
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...