【发布时间】:2021-10-28 09:59:21
【问题描述】:
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
while (true)
{
try
{
Print();
}
catch (Exception ex)
{
File.AppendAllText(@"C:\fold1\Log.txt", ex.ToString());
}
}
}
public static void Print()
{
//Print & Move the files after printing
DirectoryInfo sourceinfo = new DirectoryInfo(@"C:\A");
DirectoryInfo target = new DirectoryInfo(@"C:\A1");
foreach (FileInfo fi in sourceinfo.GetFiles())
{
if (fi.Length != 0)
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.CreateNoWindow = true;
process.StartInfo.Verb = "print";
process.StartInfo.FileName = fi.FullName;
process.StartInfo.UseShellExecute = true;
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.Start();
if (!process.WaitForExit(1000))
process.Kill();
}
MoveFile(fi.FullName);
}
}
public static void MoveFile(string Filename)
{
string SourcePath = @"C:\fold";
string targetpath = @"C:\fold1";
if (!Directory.Exists(targetpath))
{
Directory.CreateDirectory(targetpath);
}
string[] sourceFiles = Directory.GetFiles(SourcePath);
foreach (string sourcefile in sourceFiles)
{
string mfilename = Path.GetFullPath(sourcefile);
string mname = Path.GetFileName(sourcefile);
if (mfilename == Filename)
{
string distnition = Path.Combine(targetpath, mname);
File.Move(mfilename, distnition);
}
}
}
protected override void OnStop()
{
File.AppendAllText(@"C:\fold1\stop.txt", "Stop method");
}
}
我正在尝试通过 Windows 服务静默打印文件,我使用此命令安装它:
SC CREATE "MyServiceName" binpath = "My service's path"
但我什至无法启动我的服务,我收到错误 1053。启动时间太长,启动时它只执行我的代码的一部分。
让我解释一下:我的代码应该打印一个目录中的 pdf 文件,然后将它们移动到另一个目录,但是当我收到此错误时,它只执行移动部分,它不打印文件。
【问题讨论】:
-
将任何长时间运行的工作放在单独的线程中,
OnStart方法必须快速返回。 -
已经做了,同样的问题
-
发布更新的代码,如果是这样的话。
-
我贴出来了,我把定时器从10秒减到1秒,还是一样的问题
-
OnStart中有一个无限循环。您可以尝试使用FileSystemWatcher,但我怀疑您能否成功从服务打印 pdf 文件(使用 adobe 阅读器?)。
标签: c# windows service printing silent