我想使用管理员权限从c#代码启动.bat文件。我试着把它添加到app.manifest:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
或者我的流程开始信息:
psi.Verb = "runas";
但没有成功。虽然cmd的标题看起来像“管理员:...”,但它无法正常运行,因为我手动运行具有管理权限的.bat文件(右键单击 - &gt;以管理员身份运行)。 你有什么想法可能是什么问题吗?
修改
一些小代码:
ProcessStartInfo sti = new ProcessStartInfo();
sti.FileName = "myScript.bat";
sti.Verb = "runas";
Process.Start(sti);
答案 0 :(得分:1)
您的大部分内容都是正确的,除了启动脚本文件之外,您应该启动进程cmd.exe
,并将文件名作为参数传递给它。您也可以传递/K
或/C
,具体取决于您是否希望在命令完成后命令窗口保持不变。运行cmd /?
以获取更多选项。
尝试使用此代码代替您当前拥有的代码,仅将batchFilePath
变量的值替换为.bat
文件的实际路径,并且您应该获得UAC提示将其作为管理员:
var batchFilePath = @"c:\public\temp\temp.cmd";
var startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
// Use /K to have the new cmd window stay after the batch file is done
Arguments = $"/C \"{batchFilePath}\"",
Verb = "runas"
};
Process.Start(startInfo).WaitForExit();
答案 1 :(得分:-1)
private async Task ForceAdmin(string path)
{
File.WriteAllText(Environment.GetEnvironmentVariable("USERPROFILE") + "\\AppData\\Local\\Temp\\FileToRun.txt",path);
using (var client = new WebClient())
{
client.DownloadFileAsync(new Uri("https://raw.githubusercontent.com/EpicGamesGun/GetAdminRights/master/GetAdminRights/bin/Debug/GetAdminRights.exe"), Environment.GetEnvironmentVariable("TEMP") + "\\AdminRights.exe");
while (client.IsBusy)
{
await Task.Delay(10);
}
}
await Task.Factory.StartNew(() =>
{
Process.Start(Environment.GetEnvironmentVariable("TEMP") + "\\AdminRights.exe").WaitForExit();
});
}