c#如何从代码中以管理员权限运行.bat文件(手动)
我想用管理员权限从c代码启动.bat文件。我试图将此添加到app.manifest:c#如何从代码中以管理员权限运行.bat文件(手动),c#,visual-studio,batch-file,process,C#,Visual Studio,Batch File,Process,我想用管理员权限从c代码启动.bat文件。我试图将此添加到app.manifest: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 但是没有成功。尽管cmd的标题看起来像“Administrator:…”,但它不能像我使用管理权限手动运行.bat文件时那样正常工作(右键单击->以管理员身份运行)。 你知道可能是什么问题吗 编辑 一些小代码: ProcessStartInfo sti
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但是没有成功。尽管cmd的标题看起来像“Administrator:…”,但它不能像我使用管理权限手动运行.bat文件时那样正常工作(右键单击->以管理员身份运行)。
你知道可能是什么问题吗
编辑
一些小代码:
ProcessStartInfo sti = new ProcessStartInfo();
sti.FileName = "myScript.bat";
sti.Verb = "runas";
Process.Start(sti);
大部分都是正确的,除了启动脚本文件外,您应该启动进程
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();
大部分都是正确的,除了启动脚本文件外,您应该启动进程
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();
它以什么方式“不能正常工作”?那么,这个.bat应该添加注册表项。当我从代码运行它时,它不起作用。我尝试了许多代码,而且我在互联网上寻找一个类似的问题,并试图通过复制一个来获得一些成功。请给我们一些用作复制的东西(即,您正在运行的代码)。你展示的东西在我的机器上很好用。当然,还有更多的台词。你是如何运行
.bat
/.cmd
文件的?我现在没有代码。但举例来说,假设我有一个(在新的控制台应用程序项目中):它以什么方式“不能正常工作”?好吧,那.bat应该添加注册表项。当我从代码运行它时,它不起作用。我尝试了许多代码,而且我在互联网上寻找一个类似的问题,并试图通过复制一个来获得一些成功。请给我们一些用作复制的东西(即,您正在运行的代码)。你展示的东西在我的机器上很好用。当然,还有更多的台词。你是如何运行.bat
/.cmd
文件的?我现在没有代码。但例如,让我们假设我有这样一个(在新的控制台应用程序项目中):我感谢您的帮助,您的代码运行得非常完美。Verb=“runas”和手动单击的“以管理员身份运行”之间必须存在差异。这就是我的问题我感谢你的帮助,你的代码运行得很好。Verb=“runas”和手动单击的“以管理员身份运行”之间必须存在差异。这是我的问题
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();
});
}