从Windows 7服务启动应用程序

时间:2011-09-26 20:49:49

标签: windows service printing impersonation

我们目前正在使用由位于Firebird数据库中的用户定义函数启动的报表打印应用程序,该数据库作为服务运行。

UDF由一个简单的DLL组成,该DLL启动报告应用程序并通过“CreateProcessAsUser”API传递要打印的报告ID。

详细说明,我们冒充特定的Windows帐户才能访问用户的打印机。 运行软件的计算机从不参加。实际上没有人在其上开会。

所以这就是我们如何做到的:

LogonUser( sUser, nil, sPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken );

...

LoadUserProfile(hToken, ProfileInfo);

...

ImpersonateLoggedOnUser(hToken);

...

StartupInfo.lpDesktop := Pchar('Winsta0\Default');

CreateProcessAsUser(hToken,nil, Pchar(sCommand), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);

...

UnloadUserProfile(hToken,ProfileInfo.hProfile);

现在我们已经转移到Windows 7平台,显然,它不再起作用了。

即使用户未登录,是否仍可以模拟用户帐户并使用windows vista / 7下的服务使用他的打印机? (否则我将使用用户当前活动的会话ID)

感谢您的帮助

0 个答案:

没有答案