我有一个Visual Studio Windows应用程序项目.我添加了代码来下载安装程序更新文件.完成下载后的安装程序需要管理员权限才能运行.我添加了一个清单文件.
当用户单击DownloadUpdate.exe时,UAC会提示用户输入管理员权限.所以我假设在DownloadUpdate.exe中创建和调用的所有进程都将以管理员身份运行.所以我使用以下代码调用我的下载文件:
Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.FileName = strFile;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
Run Code Online (Sandbox Code Playgroud)
Nic*_*ver 81
试试这个:
//Vista or higher check
if (System.Environment.OSVersion.Version.Major >= 6)
{
p.StartInfo.Verb = "runas";
}
Run Code Online (Sandbox Code Playgroud)
或者,转到您的应用程序的清单路线.
drg*_*mak 27
首先,您需要包含在您的项目中
using System.Diagnostics;
Run Code Online (Sandbox Code Playgroud)
之后,您可以编写一个通用方法,您可以将其用于要使用的不同.exe文件.它将如下所示:
public void ExecuteAsAdmin(string fileName)
{
Process proc = new Process();
proc.StartInfo.FileName = fileName;
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.Verb = "runas";
proc.Start();
}
Run Code Online (Sandbox Code Playgroud)
如果你想执行notepad.exe,那么你所做的就是调用这个方法:
ExecuteAsAdmin("notepad.exe");
Run Code Online (Sandbox Code Playgroud)
MSa*_*adi 21
这是对您的问题的明确答案: 如何强制我的.NET应用程序以管理员身份运行?
摘要:
右键单击项目 - >添加新项 - >应用程序清单文件
然后在该文件中更改如下所示的行:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)
编译并运行!
Dar*_*rov 18
var pass = new SecureString();
pass.AppendChar('s');
pass.AppendChar('e');
pass.AppendChar('c');
pass.AppendChar('r');
pass.AppendChar('e');
pass.AppendChar('t');
Process.Start("notepad", "admin", pass, "");
Run Code Online (Sandbox Code Playgroud)
也适用于ProcessStartInfo:
var psi = new ProcessStartInfo
{
FileName = "notepad",
UserName = "admin",
Domain = "",
Password = pass,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true
};
Process.Start(psi);
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 18
这在我尝试时有效.我用两个示例程序仔细检查:
using System;
using System.Diagnostics;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Process.Start("ConsoleApplication2.exe");
}
}
}
Run Code Online (Sandbox Code Playgroud)
using System;
using System.IO;
namespace ConsoleApplication2 {
class Program {
static void Main(string[] args) {
try {
File.WriteAllText(@"c:\program files\test.txt", "hello world");
}
catch (Exception ex) {
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先证实我得到了UAC炸弹:
System.UnauthorizedAccessException:拒绝访问路径'c:\ program files\test.txt'.
//等..
然后使用以下短语向ConsoleApplication1添加了清单:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)
没有炸弹.而且我无法轻易删除文件:)这与运行Vista和Win7的各种机器上的几个先前测试一致.启动的程序从启动程序继承安全令牌.如果启动器已获得管理员权限,则启动的程序也具有管理员权限.
小智 6
以下是没有Windows Prompt的管理员运行过程的示例
Process p = new Process();
p.StartInfo.FileName = Server.MapPath("process.exe");
p.StartInfo.Arguments = "";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.Verb = "runas";
p.Start();
p.WaitForExit();
Run Code Online (Sandbox Code Playgroud)