2012-04-19 122 views
5

我需要给我的应用程序管理员权限,因为它知道它将从用户会话而不是管理员帐户运行。强制应用程序具有管理员权限

我看过其他网站,但找不到任何有用的东西。

我试图编辑清单中其他的东西,也有插入的行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

这给了我尝试在使用ClickOnce发布,而不是当我调试的错误。

你能帮我吗?

回答

1

我很确定这种行为是有目的的。

ClickOnce应用程序被设计为无需管理员权限即可安装。在运行时无法提升它们,因为这意味着实际上没有管理权限的用户可以安装,然后以管理员身份运行该应用程序;这将是一个安全风险。

5

首先的 - 事实上,它不是由设计允许,安装和ClickOnce的应用程序作为管理员:http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

这个帖子看看:http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - 它说明如何运行的ClickOnce应用程序作为管理员。但是 - 不得不说我走过了这条道路 - 而且我没有太多运气。我用这种方法遇到了很多麻烦(试图以管理员权限运行ClickOnce应用程序)。据我所知,最大的问题是自动更新无法正常工作。更不用说非管理员用户可能需要始终输入管理员凭证。

所以,我的建议是重新考虑你的逻辑,并封装你需要在一个单独的EXE文件做作为管理员片 - 并为用户很清楚的是,当他点击该按钮,UAC提示会显示出来(可能是通过加载按钮“屏蔽”图标)。而在这button_click事件做这样的事情:

// 2. Run Photoshop action on this image (and wait for the task to complete) 
if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false) 
{ 
    var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath, "\"" + imgPhotoshopActionAbsPath + "\""); 
    pi.UseShellExecute = true; 
    pi.Verb = "runas"; 
    var photoshopAction = Process.Start(pi); 
    var success = photoshopAction.WaitForExit(); 
    if (success == false) 
    { 
     // do something here 
    }     
} 

这种方法的工作对我非常好。这里的关键是这样的:

pi.UseShellExecute = true; 
pi.Verb = "runas"; 

它运行你的EXE与管理权 - 所以UAC提示将显示在那一刻。这里的另一个不错的结果是,用户在每次使用应用程序时可能不会运行这个特定的逻辑 - 因此,当他们不需要它时,它们不会被提示所烦恼。

+0

并且没有UAC提示? – Atoxis 2012-04-19 12:42:23

+0

@Matth对不起,我不清楚你的问题。目标是在提升模式下运行一些代码。除非你是管理员,否则你需要提示来升级你的应用。 – avs099 2012-04-19 12:45:54

+0

将使用此应用程序的工程师是计算机上的用户帐户。该应用程序执行需要管理员的prvilèges过程。由于安全原因,他们的管理员帐户已提供,因此无法安装。我只想对用户透明。和我已经没有管理UAC得益于调用过程的原理相同的命令 p.StartInfo.UserName =“用户” p.StartInfo.Password =“秘密” 但显示的唯一担心我的命令提示符。虽然我喜欢它在后台运行。 – Atoxis 2012-04-19 12:58:44

相关问题