2016-03-13 2 views
0

Я создал код, который сравнивает файлы XML на стороне клиента (на ПК) с XML-файлом, расположенным на FTP-сервере; где, когда он обнаруживает, что клиент работает с более старой версией программы, он загрузит последнюю версию (так что у пользователя всегда будет актуальная программа).Custom Application updater

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

Этот процесс выполняется отлично, если он устанавливается где-то еще, кроме под системной папкой (под этим я подразумеваю, например, C:\Program Files\). Если пользователь решил установить там основное приложение, то внезапно мое приложение выйдет из строя, поскольку оно не имеет прав администратора.

Я использую Install Shield LE при рассылке этого приложения, а пользователи, которые используют эту программу, не являются администраторами (что означает, что я перехожу на каждый компьютер и набираю пароль администратора, когда я/пользователи устанавливаю эту программу).

Есть ли способ, как выполнить мое обновленное консольное приложение с правами администратора или как определить через Install Shield, что после того, как это приложение было выполнено, я всегда хочу, чтобы он выполнялся как admin?

Надеюсь, что мое объяснение не смущает. Я более чем счастлив поделиться дополнительными сведениями, если это необходимо, поскольку мне нужно выяснить, как решить эту проблему.

ответ

1

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

Я не знаю, имеет ли InstallShield что-то вроде этого, но Advanced Installer имеет поддержку для установки выделенного updater that runs as a service, поэтому он имеет все разрешения, необходимые для установки приложения в Program Files.

Конечно, это означает, что вам нужно заменить программу обновления с помощью Advanced Installer, а также что первоначальная установка приложения на компьютерах конечного пользователя по-прежнему потребует учетных данных администратора. (будущие установки могут устанавливаться молча, без вмешательства пользователя)

1

Вам нужно добавить следующую строку в приложение манифеста:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Документация на MSDN является here.

+0

под манифестом приложения мы имеем в виду файл app.config? –

+0

Обратите внимание, что это вряд ли поможет OP из-за того, что «пользователи, которые используют эту программу, не являются администраторами», так как они не смогут предоставить пароль для подсказки. –

+0

Нет, файл app.manifest, в Visual Studio, щелкните правой кнопкой мыши project-> Добавить элемент-> Выбрать файл манифеста приложения –