ArcGis 10.1 - .NET Windows服务

时间:2013-02-24 11:54:57

标签: c# windows-services arcgis

背景

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

  1. 我们使用运行自定义地图模型系统的ESRI组件开发了第三方程序(简化系统A)。
  2. 系统A也使用自己的许可系统。
  3. 我们正在将数据从系统A提取到网络供用户查看。
  4. 系统如下: Web< - > WebService(使用.NET-Remoting 2.0)< - > WindowsService.exe< - > DataFetcherStub.dll< - > DataFetcher.dll< - >系统A
  5. 问题:

    在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”)NO LUCK

    任何人都可以提供另一种方法来获取外部exe以从Windows服务“释放自己”并且就像它自己开始一样?

2 个答案:

答案 0 :(得分:1)

Esri开发团队在不必使用管理员帐户的情况下为我提供了修复。

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

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

  1. 确保您以具有管理员权限的用户身份登录。

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

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

  4. 这将打印出在该服务中注册的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”$ {您插入新权限字符串的原始DACL字符串}
    2. 对于上面的示例,您将输入: 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。而已。网络服务现在应该没有错误地运行。

答案 1 :(得分:0)

<强>解决方案

我将运行windows-service的帐户更改为我的admin帐户,现在可以正常运行。 10.1要求运行该服务的Windows帐户更多,或者他们已降级该帐户。

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

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