目录
管理员运行bat文件,首先需要获取管理员权限。
一种是在项目中添加app.manifest文件,并设置
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
还有一种是在要运行的bat文件头部添加:
@echo off
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限
regasm ClassLibrary1.dll
regsvr32 WINEX_CAinterface.dll
timeout /t 20
另附上Process运行类:
public class RunCmd
{
private Process proc = null;
public RunCmd()
{
proc = new Process();
}
public void Exe(string cmd,string workdir)
{
LogHelper.Info($"执行命令行:{cmd}");
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WorkingDirectory = workdir;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.OutputDataReceived += new DataReceivedEventHandler(sortProcess_OutputDataReceived);
proc.Start();
StreamWriter cmdWriter = proc.StandardInput;
proc.BeginOutputReadLine();
if (!String.IsNullOrEmpty(cmd))
{
cmdWriter.WriteLine(cmd);
}
cmdWriter.Close();
proc.Close();
LogHelper.Info($"执行命令行结束");
}
private void sortProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
{
//this.BeginInvoke(new Action(() => { this.listBox1.Items.Add(e.Data); }));
LogHelper.Info(e.Data);
}
}
}
本文介绍两种获取管理员权限的方法:一是通过在项目中添加app.manifest文件并设置相应属性;二是修改bat批处理文件头部,利用特定命令提升权限。此外,还提供了一个C#示例类用于运行命令行程序。
4903

被折叠的 条评论
为什么被折叠?



