我一直在尝试创建一个简单的应用程序来备份Windows Server数据库以及整个服务器备份。 为此,我要使用我的应用程序正在执行的批处理文件。 我尝试了几种方法,但是由于某种原因,它总是失败,因此,如果您能帮助我,我会很高兴。
批处理文件BACKUPSERVER:
wbadmin start backup -backupTarget:D: -include:C: -allCritical -quiet
我必须以管理员身份运行bat,否则由于缺少权限而无法运行。
C#代码:
static Task<int> RunProcessAsync(string fileName)
{
............
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.Verb = "runas";
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/C \"D:\\SQLBACKUP\\BACKUPSERVER.bat\"";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
}
调试显示“未找到wbadmin”。是否激活“ runas”没有任何作用。
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fileName;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = true;
startInfo.CreateNoWindow = false;
// startInfo.Verb = "runas";
var process = new Process
{
StartInfo = { FileName = fileName },
EnableRaisingEvents = true
};
process.StartInfo = startInfo;
process.Exited += (sender, args) =>
{
tcs.SetResult(process.ExitCode);
process.Dispose();
};
process.Start();
也不起作用。
有什么想法吗?
编辑: 我可以运行诸如shutdown之类的命令,但是wbadmin根本不起作用...
答案 0 :(得分:0)
这是我解决问题的方法:
如果您打算在64位系统上使用您的应用程序,请确保为64位编译,否则它将重定向到其他子文件夹,并且找不到'wbadmin.exe'。
使用ProcessStart运行wbadmin或运行批处理但不直接输入cmd,因此将其与filename =批处理文件一起使用,或者将wbadmin与startInfo.Arguments一起使用:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fileName;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = true;
startInfo.CreateNoWindow = false;
// startInfo.Verb =“ runas”;
var process = new Process
{
StartInfo = { FileName = fileName },
EnableRaisingEvents = true
};
process.StartInfo = startInfo;
process.Exited += (sender, args) =>
{
tcs.SetResult(process.ExitCode);
process.Dispose();
};
process.Start();
确保您请求管理员权限