Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何从代码中以管理员权限运行.bat文件(手动)_C#_Visual Studio_Batch File_Process - Fatal编程技术网

c#如何从代码中以管理员权限运行.bat文件(手动)

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

我想用管理员权限从c代码启动.bat文件。我试图将此添加到app.manifest:

<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();
    });

}