【发布时间】:2010-12-10 12:39:32
【问题描述】:
我有这个应用程序需要在受保护的路径中执行一些操作(例如 %PROGRAMFILES%),我知道我应该使用 %APPDATA%,但我现在无法更改。我已经隔离了所有可能需要 UAC 出现在另一个项目中的东西,这是一个示例代码:
using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
class Class1
{
static void Main(string[] args)
{
try
{
File.CreateText(Path.Combine(Application.StartupPath, "something.txt"));
}
catch (UnauthorizedAccessException ex)
{
MessageBox.Show(ex.Message, "UnauthorizedAccessException", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (args.Length == 0)
{
Process proc = new Process();
proc.StartInfo.FileName = Application.ExecutablePath;
proc.StartInfo.Arguments = "not again";
proc.StartInfo.Verb = "runas";
proc.Start();
}
else
{
MessageBox.Show("Exit to avoid loop.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
所以,我从我的主程序中调用这个可执行文件,如果它由于未经授权的访问而失败,它将启动自身并显示 UAC 请求。
我的问题是:
1) 我不得不将项目输出从 DLL 转换为 EXE,因为我找不到从 DLL 请求 UAC 提升的任何方法,有没有简单的方法可以做到这一点?
2) 我还注意到有些程序会显示个性化的 UAC 消息,带有程序徽标和所有这些东西,让我给你举个例子:
我怎样才能为我的程序做到这一点?
3)为了避免在以提升的权限运行时进入循环,它会得到另一个 UnauthorizedAccessException 我做了传递任何参数的事情。你会怎么做才能实现同样的目标?
我想暂时就这些了。感谢您的宝贵时间。
【问题讨论】:
-
关于颜色,取决于程序。请参阅news.softpedia.com/images/news2/Windows-Vista-UAC-Colors-3.png 了解快速概要。
标签: c# .net windows-7 windows-vista uac