2014-01-19 5 views
0

Я пытаюсь написать программу установки в Visual Basic, и я хотел бы, чтобы установщик попытался получить разрешения администратора. Если учетная запись является администратором, я хочу, чтобы она просто приняла их, и если учетная запись не имеет прав администратора, я хочу показать приглашение, подобное этому.Visual Basic Program - запросить разрешения для администратора

UAC Prompt

Если пользователь может дать разрешения, то он будет продолжать с ними, и если он не может дать им, то это займет альтернативу, не-администратор разрешений маршрута, так же, как Google Chrome установщик. Как мне это сделать? Я не нашел ничего полезного в Google после часа исследований.

+1

«Если учетная запись является администратором, я хочу, чтобы она просто приняла их». Я не думаю, что это возможно. Система всегда будет отображать приглашение UAC; разница состоит в том, что стандартный пользовательский включает запрос учетных данных, как на вашем скриншоте, а администратор - нет. Кроме того, нет возможности сказать «Разрешить запуск программы, но без повышения», поэтому трудно понять, как можно выполнить второе требование. Я смущаюсь использовать слово «невозможно», но MSFT много ездит по неприступности UAC – peterG

+0

@peterG Мне все равно, отображается ли приглашение UAC. Я неправильно сформулировал свой вопрос, потому что у меня отключен ОАК на моем компьютере, поэтому, когда программе нужны привилегии администратора, она просто берет их. – DavidB

ответ

1

закончился из пространства комментариев so. , , Хороший способ справиться с установщиками, как это, состоит в использовании набора из трех программ: загрузчика, установщика и основной программы. Загрузчик - это тот, который управляется с помощью ярлыка на рабочем столе и т. Д. Его задача - проверить веб-сайт поставщика api и т. Д., Чтобы узнать, доступна ли новая версия. Если нет, то запускает основную программу. Если, однако, имеется новая версия, она дает пользователю возможность загрузить ее. Если пользователь согласен, тогда загрузчик запускает установщик. Установщик является единственным из трех, отмеченных как RequireAdmin, и поэтому приглашение UAC появляется только при необходимости. Программа установки загружает и устанавливает новую версию, удаляя или перезаписывая старую по необходимости. Мы сделали что-то подобное, и оно работает хорошо. Однако MS ClickOnce также работает хорошо и гораздо меньше кодирует, и все вокруг становится легче, и я бы посоветовал вам рассмотреть этот вариант.

РЕДАКТИРОВАТЬ: Однако немного поиска привело меня к this MSFT link - это может быть полезно. Я сам не пробовал эту технику.

1

В Visual Studio добавьте в проект новый файл, выберите «манифест приложения» в качестве типа файла, а затем нажмите «ОК».

Вы получите документ XML. Первый большой кусок документа идет что-то вроде этого:

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace the 
      requestedExecutionLevel node with one of the following. 

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

      Specifying requestedExecutionLevel node will disable file and registry virtualization. 
      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

De-закомментировать строку, которая говорит:

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

Это позволит сделать это приложение (или DLL) запустить UAC, чтобы получить администратору привилегии.

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

+1

Хороший улов - я предполагал, что ОП уже знал, как отмечать exe как requireAdmin, чего может и не быть. Кроме того, чтобы перейти к манифесту, вы можете просто нажать кнопку «Просмотр настроек Windows» на вкладке «Приложение» в проводнике проекта. – peterG

+0

@peterG Я не знал об изменении 'requireAdmin', и я еще не знаю, как сделать отдельный DLL-файл по умолчанию, если пользователь игнорирует приглашение UAC. – DavidB

+0

@ DavidB ОК, возможно, я слишком поспешил принять то, о чем вы говорили. Возможно, вы можете отредактировать его, чтобы больше узнать о том, что вы подразумеваете под «Программой установщика», и что вы хотите сделать, что невозможно сделать с помощью проекта развертывания VS (ISLE в VS2012/3) или ClickOnce и т. Д. Между тем, установка RequestedExecutionLevel в манифесте согласно ответу Натана М: как вы контролируете, генерирует ли exe приглашение UAC при запуске; ClickOnce и установщик Google Chrome избегают требования для администратора во время установки, устанавливая его в профиль пользователя, а не в файлы программы. – peterG