|
本文假定您熟悉Win32 |
|
四年前, 我被介绍给Windows NT® 服务。像许多其他程序员一样,我发现它们都很有趣,也很奇怪。不像的Windows ® 为基础的应用程序,服务通常没有任何直接的用户交互。开发人员经常告诉我,某些代码可以在基于Windows的应用程序中运行,但不能从他们的服务中运行。主要问题是对“环境”差异缺乏了解。服务的“环境”或Outlook与用户发起的基于Windows或控制台应用程序的“环境”有很大的不同。我所说的“环境”指的不仅是过程的环境变量,您还必须包括窗口站点和桌面,注册表配置单元, ![]() ![]() |
typedef struct _SERVICE_TABLE_ENTRY {// ste
LPTSTR lpServiceName;
LPSERVICE_MAIN_FUNCTION lpServiceProc;
} SERVICE_TABLE_ENTRY,
*LPSERVICE_TABLE_ENTRY; |
![]() |
![]() |
![]() |
Alerter ![]() ![]() ![]() |
![]() |
![]() |
![]() ![]() ![]() |
![]() |
![]() |
|
typedef struct _SECURITY_ATTRIBUTES {// sa
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES; |
对于大多数开发人员来说,传递NULL参数就足够了。只要操作安全对象的所有进程都在相同的安全上下文中运行,就没有问题。 ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |