如何仅在需要时提升管理员权限 vb.net

how to elevate administrator pirivileges only when required vb.net

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

不幸的是,当我想点击名为 "Update" 的按钮时,它会抛出一个错误,并显示消息:"Access Denied!"

这是我使用的代码:

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

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

进程在启动时必须获得管理员令牌,否则他们将永远不会获得管理员令牌。让它工作的唯一方法 "on demand" 是你必须制作一个需要管理员权限的第二个程序来完成下载,然后你让你的程序启动第二个程序并等待它完成。

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