如何在需要vb.net时提升管理员pirivileges

时间:2016-08-29 21:38:05

标签: .net vb.net privileges downloadfile downloadfileasync

我想创建一个具有自我更新功能的应用程序。

不幸的是,当我想点击名为"更新"的按钮时它会抛出错误,并显示以下消息:"拒绝访问!"

以下是我使用的代码:

Public Sub versionfileUPDATE()
    Try
        If System.IO.File.Exists(My.Settings.telepitesihely & "/seemtahelperv1downloader.exe") Then
            System.IO.File.Delete(My.Settings.telepitesihely & "/seemtahelperv1downloader.exe")
            Threading.Thread.Sleep(500)
            client.DownloadFileAsync(New Uri("https://dl.dropboxusercontent.com/s/azz6qundbe2rna1/SeeMta%20PK%20Generator%20V1.exe?dl=11"), My.Settings.telepitesihely & "/seemtahelperv1downloader.exe")
        Else
            client.DownloadFileAsync(New Uri("https://dl.dropboxusercontent.com/s/azz6qundbe2rna1/SeeMta%20PK%20Generator%20V1.exe?dl=1"), My.Settings.telepitesihely & "/seemtahelperv1downloader.exe")
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

那么,当用户点击更新按钮时,是否有任何需要管理员权限的解决方案?

1 个答案:

答案 0 :(得分:3)

流程必须在启动时提供管理员令牌,否则永远不会获得管理员令牌。使其“按需”工作的唯一方法是你必须制作第二个程序,需要管理员权限才能进行下载,然后让你的程序启动第二个程序并等待它完成。

但是,更好的解决方案是选择一个不需要管理员权限才能写入的更好的保存位置,例如,您可以使用Environment.GetFolderPath查找用户的LocalApplicationData文件夹(例如,对您而言)会指向像C:\Users\Ntohing_Trolll\AppData\Local这样的东西,并从那里的子文件夹中保存并运行exe。这就是Chrome等程序的更新功能,因此您无需管理权限即可进行更新。