我有这样的应用程序,需要做保护路径一些事情(如%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我做那件事传递任何ARGS。 你会怎么做来达到同样的目标是什么?
我觉得这是现在所有。 谢谢你的时间。