共享相同的dll时,服务和进程无法一起运行

时间:2013-01-30 10:39:26

标签: dll windows-services access-rights

我有一个作为Windows服务启动的进程A(user = System)。我还有一个进程B,我在自己的帐户下启动(在组管理员中)。

我观察过几种行为:

1-进程A首先作为Windows服务(用户系统)启动。然后进程B将不会运行(用户是管理员):它可以启动,但它会立即关闭而不会出现错误,即使在Windows事件中也是如此。

2-进程B首先启动(用户是管理员),运行正常。然后进程A作为Windows服务(用户系统)启动,一切正常。

3-进程A首先作为Windows服务(以管理员身份运行)启动。然后启动进程B(用户是管理员),一切正常。

4-进程A首先作为Windows服务(用户系统)启动。然后,进程B也作为Windows服务启动(用户系统)。一切正常。

在我看来,某些权利的配置存在问题,但我找不到哪一个。此外,进程A和进程B使用一些共同的DLL,所以也许问题可能存在,但我再也找不到哪个是错误的dll。

我希望你们中的一些人可以帮助我解决这个问题!我想要运行的用例是数字1。

弗雷德里克

1 个答案:

答案 0 :(得分:0)

问题是其中一个dll使用共享内存和互斥锁。如果进程A以超级用户身份运行,则使用超级用户权限创建共享内存和互斥锁。

以较低的用户权限启动的进程B将无法初始化或重新使用共享内存和互斥锁,因为它没有足够的权限来执行此操作。

我案中的解决方案: 解决方案1-在dll中停止使用共享内存和互斥锁。 解决方案2-即使无法创建/访问共享内存或互斥锁,也能够以降级模式继续运行。 解决方案3-使用同一个用户运行两个进程。

我将采用解决方案2,因为它最适合我的用例。