C#读取资源文本逐行执行sc命令出现错误求助
问题排查与解决
核心错误原因
你误用了资源读取方式:File.ReadAllLines() 方法接收的是文件路径,但 SodaScript.Properties.Resources.ServicesToDisable 是直接返回文本内容的字符串,不是文件路径。代码会把服务名列表当成文件路径去读取,自然触发“找不到文件”的错误。
修正后的代码
// 直接从项目资源读取多行文本内容 string servicesText = SodaScript.Properties.Resources.ServicesToDisable; // 分割为服务名数组,同时过滤空行和多余空白字符 string[] serviceNames = servicesText.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) .Select(service => service.Trim()) .ToArray(); foreach (string serviceName in serviceNames) { // 跳过空的服务名,避免无效命令 if (string.IsNullOrWhiteSpace(serviceName)) continue; using (Process process = new Process()) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.FileName = "sc.exe"; // 注意sc命令中"start="后面必须保留空格,这是命令要求 startInfo.Arguments = $"config {serviceName} start= disabled"; startInfo.Verb = "runas"; process.StartInfo = startInfo; process.Start(); // 等待命令执行完成,避免资源泄漏 process.WaitForExit(); } }
关键优化点
- 正确读取资源:直接通过
Properties.Resources获取文本内容,无需使用File类 - 过滤无效行:用
StringSplitOptions.RemoveEmptyEntries去掉空行,Trim()清除每行前后的空白字符(比如换行符、制表符) - 资源安全:使用
using语句自动释放Process资源,避免内存泄漏 - 空值检查:跳过空白的服务名,防止执行无效的
sc命令
内容的提问来源于stack exchange,提问作者Sycho AN
相关产品推荐
相关产品推荐

