VB.NET - 没有UAC运行shell?

时间:2013-11-25 11:12:44

标签: vb.net shell

我们正在使用“hobocopy”来运行PST文件的备份。

问题在于,当运行hobocopy时,会弹出“用户访问控制”对话框,询问是否允许运行。

我在VB.net中使用“Shell”来运行hobocopy,但它需要在后台运行并且安静地运行。

有没有办法运行具有管理员权限的“Shell”命令,因此它不会要求权限?

2 个答案:

答案 0 :(得分:1)

我的理解是你的应用程序是从你编写的代码中启动hobocopy。

如果您想在没有任何UAC提示的情况下执行此操作,那么您有两个选择:

  • 禁用UAC(不推荐!)
  • 使用提升的权限启动您的应用程序(即“以管理员身份运行”)

在典型的情况下,我不推荐其中任何一种,但是如果你必须运行hobocopy(从应用程序的描述中),我认为没有无UAC选项。

您可以尝试的另一件事是右键单击Windows中的应用程序或快捷方式,选择“属性”,然后在该对话框中启用“以管理员身份运行”选项。根据应用程序请求的确切权限,此可能避免UAC提示。 (例如:它适用于任务管理器,但不适用于Regedit;我没有Hobocopy进行测试。)

答案 1 :(得分:0)

为什么一起使用Shell?

尝试使用

System.Diagnostics.Process
System.Diagnostics.ProcessStartInfo

它为您提供了更多的可能性,例如不在shell中运行它,或者在特定的上下文中执行程序(例如另一个用户)

编辑:由于Dan指出这不能解决UAC问题,所以这里有更多想法

在搜索网络寻找解决方案后,我很快发现 方法可以击败UAC,但那些黑客。因此,如果您需要打败UAC以获得流畅的HMI,那么设计错误就会非常多。

解决此问题的方法可能包括:

  • 以管理员身份执行hobocopy(需要启用管理员帐户)
  • - >与Dan描述的方式相同,或者使用ProcessStartInfo.User
  • 禁用UAC
  • 黑客入侵提升权限状态
  • 将程序或辅助流程作为服务运行,通过ServiceControl与其连接

在我看来,只有后者才是合法的解决方案,但需要重新设计您的应用。 在事件或时间表上执行一个备份软件在我看来似乎是服务应该做的事情。