2012-03-19 5 views
-1

Я использую следующий код, чтобы поднять окно UAC. Он отлично работает, но моя форма, содержащая кнопку для поднятия этого окна, показана дважды. Я имею в виду, если я поместил его в CopyFiile Button, когда я нажму на эту кнопку, он откроет окна UAC, скопирует файл, даст сообщение об успешном завершении и затем откроет другой экземпляр той же формы, который содержит кнопку файла копирования. Пожалуйста помоги.Поднять окно UAC загружает мою форму дважды

Dim proc As New ProcessStartInfo 
    proc.UseShellExecute = True 
    proc.WorkingDirectory = Environment.CurrentDirectory 
    proc.FileName = Application.ExecutablePath 
    proc.Verb = "runas" 
    Try 
     Process.Start(proc) 
    Catch 
     ' The user refused to allow privileges elevation. 
     MsgBox("Permission denied by user ! Can not proceed.", MsgBoxStyle.Critical) 
     vrIfDenied = 1 
     Return 
    End Try 

ответ

0

Поправьте меня, если я ошибаюсь, но я вижу ваше proc имя файла свойство равно это сам. Вы работаете в то же приложение, и делает 2 экземпляра текущего приложения

+0

Вы имеете в виду proc.Verb = "runas" Я только что выбрал этот код с сайта Microsoft. Пожалуйста, поправьте меня, что делать. –

+0

no i mean proc.FileName = Application.ExecutablePath означает, что имя файла для запуска совпадает с текущим запущенным приложением, поэтому это делает 2 экземпляра приложения. Я думаю, вы должны закрыть «UnRaised form» – jasperagrante

+0

Большое спасибо. Позвольте мне попробовать. Я возвращаюсь к тебе. –

0

Добавить это в ваш код:

<DllImport("shell32.dll", EntryPoint:="IsUserAnAdmin")> _ 
Public Shared Function IsUserAnAdmin() As Boolean 
End Function 

Теперь, когда ваше приложение загружает, проверьте, чтобы увидеть, если он работает, как повышенные привилегированности, и серый из кнопки CopyFile, как это, если это не так:

If IsUserAnAdmin() = False Then 
    btnCopyFile.enabled=false 
ElseIf IsUserAnAdmin() = True Then 
    btnCopyFile.enable=true 
    btnElevateMe.enabled=false 
End If 

Теперь вы можете добавить 2-ю кнопку (btnElevateMe), который будет использовать код, который вы первоначально размещены, чтобы поднять привилегированности и воспитывать строку UAC. При запуске WITH priviledges он будет выделен серым цветом.

Кроме того, добавьте в свой код после того, как «End Try» это:

Application.Exit() 

И это будет закрыть приложение после запуска второго экземпляра с повышенными привилегиями.