1

背景:

.NET Framework 2.0,C# ESRI ArcGis 10.1 64 位 Windows Server 2008 R2。

  1. 我们有一个第三方程序(系统 A 为简单起见)使用 ESRI 组件运行自定义模型系统的地图。
  2. 系统 A 也使用它自己的许可系统。
  3. 我们正在将数据从系统 A 拉到网络上供用户查看。
  4. 系统如下: Web <-> WebService (使用 .NET-Remoting 2.0) <-> WindowsService.exe <-> DataFetcherStub.dll <-> DataFetcher.dll <-> System A

问题:

在 ArcGIS 9.3 到 ArcGIS 10.0 上运行这个都没有问题,而且系统 A 的早期版本。

系统 A 的提供者目前使用 10.0 中的 .NET-interop 将其升级到 ArcGIS 10.1。我们也这样做了,但现在它不再使用 .NET-Remoting -> WindowsService 了。

使用 DataFetcherStub 运行 EXE 一切正常。运行 Windows 服务,它在系统 A 内崩溃。

Faulting application name: windows_service.exe, version: 1.0.4802.40962, time stamp: 0x51293874
Faulting module name: AfCore_libFNP.dll_unloaded, version: 0.0.0.0, time stamp: 0x4f920360
Exception code: 0xc0000005
Fault offset: 0x619fe9b0
Faulting process id: 0x14c0
Faulting application start time: 0x01ce120f632c1f0e
Faulting application path: D:\path\windows_service.exe
Faulting module path: AfCore_libFNP.dll
Report Id: a41b42dc-7e02-11e2-8e56-00155d0a11a9

在使用 ArcGIS 获得许可并通过 Windows 服务运行时,是否有人遇到过此错误?

ESRI 论坛上有一个帖子,但它不会给我留下任何线索如何解决这个问题?

http://forums.arcgis.com/threads/74546-Product-Licensing-in-Scheduled-Batch

接近供应商不是一种选择,因为他们花了将近一年的时间来解决我们发现的最后一个问题。在他们最终证明这是他们的错误之前,指责我们长达 9 个月,我很确定他们也会与此作斗争。如果我们能做一个变通方法会更快。

我已经尝试从 Windows 服务中执行此操作。

1) System.Threading.ThreadPool.QueueUserWorkItem(o => FireAndForgetProcess()); 没运气

2)Process.Start(“FireAndForgetMe.exe”)没有运气

任何人都可以提供另一种方法来让外部 exe 从 Windows 服务“释放自身”并表现得好像它是由它自己启动的一样?

4

2 回答 2

1

Esri 开发团队给了我一个修复程序,而无需使用管理员帐户运行。

这里的问题是 FLEXnet Licensing Service(Esri 现在在 10.1 中使用,但在 10.0 中未使用)没有设置正确的执行权限,因此“网络服务”帐户可以启动它。

Esri 正在开发一个补丁,但与此同时,有一个手动解决方法:

  1. 确保您以在计算机上具有管理权限的用户身份登录。

  2. 从 Windows 开始菜单中,选择运行并输入“cmd”。右键单击“cmd.exe”并选择“以管理员身份运行”。</p>

  3. 在命令提示符下,运行以下命令:sc sdshow "FLEXnet Licensing Service"

这将打印出向该服务注册的 DACL 权限: D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;NU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;; CCLCSWRPLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

我们需要在权限字符串中插入“(A;;CCLCSWRPWPDTLOCRRC;;;WD)”,这样它就变成:D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;NU)(A;;CCLCSWRPWPDTLOCRRC;;;WD)(A ;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCLCSWRPLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) 注意:用户的 DACL 字符串可能会有所不同,并且应该小心地对字符串进行编辑。

  1. 要向服务注册 DACL,请运行以下命令: sc sdset "FLEXnet Licensing Service" ${your original DACL string with the new permission string inserted}

对于上面的示例,您将输入: sc sdset "FLEXnet Licensing Service" D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;NU)(A;;CCLCSWRPWPDTLOCRRC;;;WD)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A; ;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCLCSWRPLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

  1. 您应该看到 [SC] SetServiceObjectSecurity SUCCESS。就是这样。网络服务现在应该可以正常运行了。
于 2013-09-17T02:34:00.980 回答
0

解决方案

我将运行 Windows 服务的帐户更改为我的管理员帐户,现在它可以工作了。10.1 需要更多运行该服务的 windows 帐户,或者他们已降级该帐户。

我想我必须在早上检查一下。然而问题解决了。

编辑:这是需要在 10.1 之后提出的帐户的权利。

于 2013-02-25T00:17:00.033 回答