C#调用CMD执行wbadmin备份命令失败但ipconfig正常运行问题求助
问题原因
- 参数语法错误:你写的wbadmin参数存在多余空格,
- backupTarget应为-backupTarget,- quiet应为-quiet,参数名和前面的减号是连为一体的,中间不能加空格,这是最直接的执行失败原因。 - 管理员权限配置冲突:
Verb = "runas"是要求以管理员身份启动进程的配置,但该配置仅在UseShellExecute = true时生效,你当前设为false,导致权限提升不生效,而wbadmin执行备份操作必须要有管理员权限,会直接因为权限不足被拦截。 - 参数拼接风险:如果
TargetBackupDrive、LocationOs变量对应的路径包含空格,没有用引号包裹的话会被cmd识别为多个参数,导致命令解析错误。 - 输出读取顺序问题:先调用
ReadToEnd再等待进程退出,若进程输出内容过多会导致缓冲区满阻塞,出现程序假死情况。
修正后代码
根据你是否需要读取命令输出,可以选择对应方案:
方案1:不需要读取命令输出,自动申请管理员权限
Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; // 修正参数空格,给路径加引号避免空格影响 process.StartInfo.Arguments = $"/C wbadmin start backup -backupTarget:{TargetBackupDrive}: -include:\"{LocationOs}:\": -allcritical -quiet"; process.StartInfo.CreateNoWindow = true; process.StartInfo.UseShellExecute = true; process.StartInfo.Verb = "runas"; process.Start(); process.WaitForExit();
方案2:需要读取命令输出,确保当前程序已以管理员身份运行
Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = $"/C wbadmin start backup -backupTarget:{TargetBackupDrive}: -include:\"{LocationOs}:\": -allcritical -quiet"; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardInput = true; process.Start(); CmdOutput = process.StandardOutput.ReadToEnd(); process.WaitForExit();
内容的提问来源于stack exchange,提问作者Acarys
相关产品推荐
相关产品推荐

