当前位置: 代码迷 >> 综合 >> 一种在.net应用程序中以管理员运行bat批处理的方法
  详细解决方案

一种在.net应用程序中以管理员运行bat批处理的方法

热度:46   发布时间:2024-02-23 08:37:04.0

目录

一种是在项目中添加app.manifest文件,并设置

还有一种是在要运行的bat文件头部添加:


管理员运行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);}}}

 

  相关解决方案