You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:01:19