Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 以管理员身份运行DLL_Vb.net_Admin_Manifest_Uac - Fatal编程技术网

Vb.net 以管理员身份运行DLL

Vb.net 以管理员身份运行DLL,vb.net,admin,manifest,uac,Vb.net,Admin,Manifest,Uac,我尝试在管理上下文中执行单个DLL,以强制用户在调用方法时输入UAC,以防他作为普通用户进行身份验证 我在这里找到了建议: 我试图创建Nathan M建议的内容,但我没有显示UAC控件 这是我正在使用的代码: 主要用途: 导入系统 导入System.Diagnostics.Eventing.Reader 导入GetUninstallToken.UninstallToken 公开课表格1 私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击 尝试 变暗t作为新的开始 t、 测试(

我尝试在管理上下文中执行单个DLL,以强制用户在调用方法时输入UAC,以防他作为普通用户进行身份验证

我在这里找到了建议:

我试图创建Nathan M建议的内容,但我没有显示UAC控件

这是我正在使用的代码:

主要用途:

导入系统
导入System.Diagnostics.Eventing.Reader
导入GetUninstallToken.UninstallToken
公开课表格1
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
尝试
变暗t作为新的开始
t、 测试()
特例
结束尝试
端接头
我在项目中添加了一个简单的DLL文件,仅用于获取身份验证对话框:

名称空间卸载令牌
公开课开始了
公共子测试()
MsgBox(“测试”)
端接头
末级
结束命名空间
我已经创建了一个清单文件,它应该应用于具有此配置的DLL


因此,当我运行程序并单击按钮时,会调用DLL并显示MsgBox,但没有UAC-我不是以管理员身份运行VS

你知道我错过了什么吗?似乎清单文件可能会被忽略


我正在Win 10 19H2上使用Microsoft Visual Studio Community 2019版本16.5.4-我以普通用户身份执行。

这是我最后想到的:

  • 我已生成一个新的EXE,其中包含请求的子功能

  • 我添加了一个清单文件,将执行上下文设置为“requireAdministrator”

  • 我使用以下代码在主应用程序中调用该exe:

    Try
         Dim process As System.Diagnostics.Process = Nothing
         Dim processStartInfo As System.Diagnostics.ProcessStartInfo
         processStartInfo = New System.Diagnostics.ProcessStartInfo()
         processStartInfo.FileName = ".\MyApplication.exe"
         processStartInfo.Verb = "runas"
    
         processStartInfo.Arguments = ""
         processStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal
         processStartInfo.UseShellExecute = True
         process = System.Diagnostics.Process.Start(processStartInfo)
    
     Catch ex As Exception
         MsgBox("You need to be administrator to request this function")
     End Try
    
  • 这样,我在调用函数时确实会收到UAC提示,如果没有,则会向用户显示一条错误消息


    可能不是最优雅的事情,但简单且有效;)

    这回答了你的问题吗?你好,谢谢你提供的信息。事实上,我在搜索时没有想到这一点,答案实际上与我在berfore(我想)找到的不同。。。将检查rundll的内容,看看这是否有帮助。Thx Danielt关于这个问题的第一条评论中链接的答案是正确的:没有“以管理员身份运行DLL”这样的事情,因为DLL包含由进程执行的代码,并且只有进程可以提升。正如另一个答案所说:如果您需要DLL中的代码来运行提升版,请编写一个调用DLL中代码的可执行文件,然后运行提升版的可执行文件。