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

.NET实现7*24小时运行的PDF自动打印删除程序部署咨询

将.NET控制台PDF监听程序部署为后台服务实现全天候运行

方案一:改造为原生Windows服务(推荐)

直接把控制台程序改成Windows服务,系统启动时自动运行,完全后台执行,无需终端窗口。

步骤:

  1. 安装NuGet包:Microsoft.Extensions.Hosting.WindowsServices
  2. 重构Program.cs,配置Windows服务宿主:
    var host = Host.CreateDefaultBuilder(args)
        .UseWindowsService(opt => opt.ServiceName = "PDF自动打印服务")
        .ConfigureServices(services =>
        {
            services.AddHostedService<PdfWatcherService>(); // 替换为你的监听服务类
        })
        .Build();
    
    await host.RunAsync();
    
  3. 把原来的FileSystemWatcher逻辑封装成BackgroundService派生类(比如PdfWatcherService):
    public class PdfWatcherService : BackgroundService
    {
        private FileSystemWatcher? _watcher;
        private readonly ILogger<PdfWatcherService> _logger;
    
        public PdfWatcherService(ILogger<PdfWatcherService> logger)
        {
            _logger = logger;
        }
    
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _watcher = new FileSystemWatcher(@"C:\Path\To\Test")
            {
                Filter = "*.pdf",
                NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite,
                EnableRaisingEvents = true
            };
    
            _watcher.Created += OnPdfCreated;
            stoppingToken.Register(() =>
            {
                _watcher?.Dispose();
                _logger.LogInformation("监听服务已停止");
            });
    
            _logger.LogInformation("PDF自动打印服务已启动,监听目录:C:\\Path\\To\\Test");
            return Task.CompletedTask;
        }
    
        private void OnPdfCreated(object sender, FileSystemEventArgs e)
        {
            // 这里放你的打印、删除逻辑,注意处理文件锁定问题
            try
            {
                // 等待文件写入完成(避免文件被占用)
                Thread.Sleep(1000);
                // 执行打印逻辑
                // 打印完成后删除文件
                File.Delete(e.FullPath);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "处理文件 {FileName} 时出错", e.Name);
            }
        }
    }
    
  4. 发布程序:打开命令行,运行dotnet publish -c Release -r win-x64 --self-contained true,生成独立可执行文件
  5. 安装服务:以管理员身份打开命令提示符,运行
    sc create "PDF自动打印服务" binPath="C:\Path\To\Published\YourApp.exe"
    
  6. 启动服务并设置自动启动:
    sc start "PDF自动打印服务"
    sc config "PDF自动打印服务" start= auto
    
    之后可以在Windows服务管理器中管理该服务。

方案二:用NSSM包装现有控制台程序为服务(无需改代码)

如果不想修改现有代码,用NSSM工具把现有exe直接包装成Windows服务。

步骤:

  1. 下载对应系统架构的NSSM工具,解压到本地目录
  2. 以管理员身份打开命令提示符,切换到NSSM所在目录,运行nssm install "PDF自动打印服务"
  3. 在弹出的配置窗口中:
    • Application标签:设置Path为你的exe文件路径,Working Directory为exe所在文件夹
    • Details标签:填写服务名称和描述
    • Log On标签:选择有Test文件夹读写权限和打印机权限的账户(建议用本地系统账户或专用服务账户)
  4. 点击Install Service完成安装,之后在服务管理器中启动服务,设置为自动启动即可。

方案三:用任务计划程序实现开机后台运行

如果不想用服务,也可以通过任务计划让程序开机自动后台运行:

  1. 打开「任务计划程序」,点击「创建基本任务」
  2. 触发器选择「当计算机启动时」
  3. 操作选择「启动程序」,选中你的exe文件
  4. 在「设置」页面勾选「不管用户是否登录都要运行」,并选择「使用最高权限运行」
  5. 完成后,程序会在系统启动后后台静默运行,不会显示终端窗口。

关键注意事项

  • 确保程序运行账户拥有Test文件夹的读写权限和目标打印机的打印权限
  • 给FileSystemWatcher添加异常捕获,避免单个文件处理失败导致整个程序崩溃
  • 处理文件锁定问题:新添加的PDF可能还在写入中,建议在处理前短暂等待(如示例中的Thread.Sleep),或者用循环尝试读取直到成功
  • 独立部署时,确保发布的目标架构和服务器一致(比如win-x64对应64位系统)

内容的提问来源于stack exchange,提问作者Midlaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:23:09