从Windows服务打印Pdf并在注销后继续工作

时间:2018-01-25 09:08:43

标签: c# windows-services pinvoke createprocess createprocessasuser

我正在创建一个以时间间隔打印pdf的Windows服务。

我对此进行了一些研究并找到了一个类

 string pdfPrinterLocation = @"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe";
 string pdfArguments = "/t /o C:\Windows\TEMP\761372.pdf";
 ProcessStarter processStarter = new ProcessStarter("AcroRd32", pdfPrinterLocation, pdfArguments);
 processStarter.Run();
 processStarter.WaitForExit();
 processStarter.Stop();

并像这样调用此类

Run

此代码工作正常并且做得很好。

但这仅在某些用户登录系统时才有效。意味着当我登录时它正在工作。但是当我注销我的用户时,它就无法正常工作了。 当我锁定我的系统然后它正在工作但是当注销并切换用户时它就不起作用了。

我已检查过服务日志,以检查问题所在。

所以我在 IntPtr primaryToken = GetCurrentUserToken(); if (primaryToken == IntPtr.Zero) { return; } 方法

中找到了这个陈述
primaryToken

当用户登录时,IntPtr.Zero状态良好,但在注销或切换用户时则为GetCurrentUserToken

然后我检查了Run方法。我发现此方法正在为当前登录的用户令牌创建令牌。这就是注销后无法正常工作的原因。

但我希望在注销后进行打印。

在此CreateProcessAsUser方法中CreateProcess用于创建打印过程。

但我不知道如何在没有用户的情况下创建流程。 方法{ "dependencies": { "@angular/common": "2.0.0-rc.3", "@angular/compiler": "2.0.0-rc.3", "@angular/core": "2.0.0-rc.3", "@angular/http": "2.0.0-rc.3", "@angular/platform-browser": "2.0.0-rc.3", "@angular/platform-browser-dynamic": "2.0.0-rc.3", "es6-shim": "^0.35.3", "firebase": "^3.9.0", "ionic-angular": "^3.9.2", "ionic-native": "1.3.2", "ionicons": "3.0.0", "reflect-metadata": "^0.1.12", "rxjs": "5.0.0-beta.6", "zone.js": "^0.6.12" }, "devDependencies": { "del": "2.2.0", "gulp": "3.9.1", "gulp-watch": "4.3.5", "ionic-gulp-browserify-typescript": "2.0.0", "ionic-gulp-fonts-copy": "^1.0.0", "ionic-gulp-html-copy": "^1.0.0", "ionic-gulp-sass-build": "^1.0.0", "ionic-gulp-scripts-copy": "^2.0.0", "run-sequence": "1.1.5" } }。也许它会在没有用户令牌的情况下创建流程我对它不太了解。找到了这个here

但它也没有用。 即使它在用户登录时也无法正常工作。

我想使用Windows服务在某个时间间隔内打印pdf文件。 并且它应该在用户注销或切换用户或锁定后继续工作。

任何人都知道如何实现这一目标?

由于

0 个答案:

没有答案