Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
C# 如何将文件复制为“文件”;“标准用户”;在Vista(即“管理选择应用程序”)中提示用户输入管理员凭据?_C#_.net_Uac_Elevated Privileges - Fatal编程技术网

C# 如何将文件复制为“文件”;“标准用户”;在Vista(即“管理选择应用程序”)中提示用户输入管理员凭据?

C# 如何将文件复制为“文件”;“标准用户”;在Vista(即“管理选择应用程序”)中提示用户输入管理员凭据?,c#,.net,uac,elevated-privileges,C#,.net,Uac,Elevated Privileges,我有UAC开发指南所称的“管理选择应用程序”。如果您熟悉这是什么,请跳到下一节 背景: 我想让“标准”用户能够在我的应用程序的首选项中选择/取消选择启动时运行选项 由于我的应用程序是每台机器(而不是每用户)运行的,因此需要删除一个快捷方式文件或将其复制到“开始”菜单/程序/启动文件夹中,该文件夹需要管理员访问才能执行此操作 因此,我希望出现“用户帐户控制凭据提示”,这样,如果用户有管理员帐户,他们也可以输入凭据。显然,应用程序的设计应该是这样的,以避免用户每次需要执行管理操作时都必须切换到另一个

我有UAC开发指南所称的“管理选择应用程序”。如果您熟悉这是什么,请跳到下一节

背景:

我想让“标准”用户能够在我的应用程序的首选项中选择/取消选择启动时运行选项

由于我的应用程序是每台机器(而不是每用户)运行的,因此需要删除一个快捷方式文件或将其复制到“开始”菜单/程序/启动文件夹中,该文件夹需要管理员访问才能执行此操作

因此,我希望出现“用户帐户控制凭据提示”,这样,如果用户有管理员帐户,他们也可以输入凭据。显然,应用程序的设计应该是这样的,以避免用户每次需要执行管理操作时都必须切换到另一个帐户

摘自MSDN文档:

行政选择申请

提升的进程或COM对象

初始应用程序启动时不需要提升。用户界面中那些需要管理访问令牌的项用屏蔽图标作为标识进行装饰。此装饰向用户表明,使用该功能需要管理员批准。当应用程序检测到已选择其中一个按钮时,它有以下两个选择

  • 应用程序使用ShellExecute()启动第二个程序以执行管理任务。第二个程序将标记为requestedExecutionLevel的requireAdministrator,从而提示用户批准。第二个程序将使用完整的管理访问令牌运行,并且能够执行所需的任务。 -或-
  • 应用程序使用CreateElevatedComObject()启动COM对象。此API将在批准后使用完整的管理访问令牌启动COM对象,并且此COM对象将能够执行所需的任务
我只需要复制一个文件。。。使用ShellExecute()派生一个新进程似乎太过分了,我对COM了解不够,不知道是否可以使用它来复制文件。我希望有人能发布一些代码,提供一种复制文件的方法,并在理想情况下解释如何用“sheild decorator”装饰菜单项

注:


我已经看过了一些StackOverflow文章中引用的,比如()中有关权限主题的文章。代码中只有一个调用单独进程的示例。

尽管它似乎仍然至少涉及重新启动或生成进程,但您可以在这里找到一些帮助:
在CodeProject.com

我最终选择了另一个方向。我让我的安装程序在All Users/startup文件夹中创建一个启动快捷方式,将一个参数传递给应用程序“startup”

当应用程序启动时,我会检查arg[0].equals(“启动”)是否存在,然后检查setings1.Default.runnstartup==true

如果这两个条件都成立,我会立即退出应用程序。当应用程序在没有该参数(即“开始”菜单程序组)的情况下启动时,应用程序将正常加载

Runnstartup设置是用户范围的设置,因此每个用户都可以更改,而不会影响其他用户