托尔斯泰《安娜·卡列尼娜》中说:“幸福的家庭都是相似的,不幸的家庭各有各的不幸。”对于很多初次接触arcgis destop的人而言,安装arcgis destop不成功是件非常恼人的事情。别人常常一步搞定,偏偏自己各种搜索、卸载、重装都无济于事,偏偏学习工作中还经常用到这个“神器”。那我们就来看看如何来安装一个arcgis destop,让她乖乖的跑起来。
我们应该清楚一点的是,arcgis destop是靠lmgrd.exe注册密钥许可运行的,而lmgrd.exe又是以服务监听方式运行(ArcGIS License Manager),arcgis destop进程与License Manager进程之间使用TCP/IP进行通信。因此,arcgis destop的正常启动与否,无外乎就是密钥、监听服务、桌面软件以及TCP/IP通信是否正常。明白了这一点,相信你就能一个个排查出问题所在,最后较好的启动arcgis destop进程。
1、密钥是否正确
在得到一个crack文件或者官方许可的时候,标配一般有service.txt、ARCGIS.exe或者KeyGen.exe(产生service.txt内容所需要的密钥生成器),service.txt或者KeyGen.exe生成的密钥是必须的,这一步你所做的工作,是确保service.txt里面的host(主机名)和arcgis对应的版本号应该一致,并将service.txt、ARCGIS.exe至License的bin目录下。
host(主机名)表示方式有:计算机名、localhost、this_host(arcgis表示方式)、对外IP地址(如:172.168.3.9等)、本地回环IP地址(127.0.0.1),在service.txt文件中,以上host(主机名)选一个即可。
START_LICENSE
Server localhost ANY 27009
Vendor ARCGIS
FEATURE 3DEngine ARCGIS 10.5 permanent uncounted vendor_info=7KNJDRHFHBK4CFDMJ214 SIGN="052E ABFC 32DD \
2473 DEFD E276 4BF3 E0DB 87EB 2203 5A30 C014 19A1 C35E 2154 \
08B1 9460 A2B9 6701 DC4D CAF2 E2FE 1347 0E36 90FA 4F3B E864 \
BEC8 D3A2 A615"
版本号:大的版本号是esri的argis每年发行版,有10.0,10.1、10.2~10.6,小的版本号,如10.2.0,10.2.1,10.2.2,是大版本号的补丁系列,应确保service.txt中的版本号与安装文件的版本号一致。比如安装文件10.2.2,ArcGIS_Data_Interop_Ext_for_Desktop_1022_140438,那么对应的service.txt中本版字样为
FEATURE 3DEngine ARCGIS 10.2 02-jan-0000 2048 AEA2E091990F0E6D001A \vendor_info=TYFJP0FEF40P7PG3T235 ck=242
FEATURE Aeronautical ARCGIS 10.2 02-jan-0000 2048 9EB21021133DD2FFD327 \vendor_info=J3M07HEHGH5NYZCP8086 ck=208
FEATURE AGSData ARCGIS 10.2 02-jan-0000 2048 DE22A0F14B97763358A8 \vendor_info=X61NKZH3EJKZ11T04165 ck=28
2、服务是否启动
前面说到License Manager是通过服务监听的方式运行的,在Windows中,可以在Windows服务控制管理器(SCM)中看到服务的几种状态,一个服务通常有启动、停止、禁止三种状态。
要想arcgis destop能运行,在服务策略里需保证arcgis License Manager是处于运行状态的(当然如果能绕过arcgis License Manager,在arcgis destop和arcgis License Manager就有crack机制掐断她两,那就另当别论了)。在配置密钥的时候,需要停止arcgis License Manager,否则arcgis License Manager在监听ARCGIS.exe,你根本就替换不了它。
另外一种启动服务的方式是:用命令行启动:lmgrd.exe -z -c service.txt。
如果有arcgis using tcp-port XXX,那恭喜你,arcgis License Manager服务启动了,
如果是failed to open the TCP port number in the liscense,好吧,很失败。不过也别担心,它会告诉你为啥失败了,端口关闭、端口占用、防火墙挡住等等。
还有一种情况是找不到arcgis License Manager服务,请定位lmgrd.exe的路径,如:D:\Program Files (x86)\ArcGIS\License10.5\bin\lmgrd.exe,将lmgrd.exe注册为守护进程(服务),详细参见附件一。
3、端口是否正确
arcgis License Manager 使用的是tcp协议中的端口,倘若该端口是关闭、占用的,arcgis License Manager是不能运行的,那么我们需要将这个端口设置正确,倘若端口被占用了,好吧,网上的方式常常是让你换个端口,比如把service.txt中的27000改成27008。。。。
或者你也可以自己定义一个端口,在service.txt 中的 第三行 arcgis 后加上port=2345,使得License Manager和ARCGIS.exe通信端口改为2345,而不是程序遍历27000到27009搜索这样的大端口列,辨别通信端口。
START_LICENSE
Server localhost ANY 27008
Vendor ARCGIS port =2345
FEATURE 3DEngine ARCGIS 10.5 permanent uncounted vendor_info=7KNJDRHFHBK4CFDMJ214 SIGN="052E ABFC 32DD \
2473 DEFD E276 4BF3 E0DB 87EB 2203 5A30 C014 19A1 C35E 2154 \
08B1 9460 A2B9 6701 DC4D CAF2 E2FE 1347 0E36 90FA 4F3B E864 \
BEC8 D3A2 A615"
当然,我们也可以用命令netstat命令来查看哪个进程在使用该端口,然后taskkill 干掉这个占用这个端口的进程,或者在任务管理器中,找到该进程,直接干掉该进程,以确保arcgis License Manager 需要用到的端口不被占用。如果是防火墙阻挡了端口,那就的去防火墙那设置出站、入站规则了。
配置完,你的arcgis License Manager再启用就行。
4、输入是否正确或其他
假如说,你的密钥文件service.txt没有读入权限,又假如你的arcgis License Manager没有写入注册表,还假如你的arcgis License Manager需要依赖.net库,那都是系统本身未能正确配置造成的。没有读入权限,我们可以在文件的安全项中加入当前用户读入权限,不能添加到注册表,那就写进去HKEY_CURRENT_USER。。。。。没有.net,那就正确安装,读一读arcgis destop 安装帮助也很有必要,他至少能告诉我们,安装这个东东需要依赖的软件环境。
附一:windows下将程序注册为服务
一、 Windows 服务简介
1、Windows 服务与标准应用程序区别
Window 标准的exe可执行程序通常有一个用户界面,Console或GUI,通常由用户来启动或停止。而Windows Service则 是一种可随 Windows 操作系统启动而启动的,在后台运行的,通常不和用户产生交互的程序,长期驻留在内存中,是守护进程。
Windows 服务允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。 这些功能使服务非常适合在服务器上使用,或者需要长时间运行的功能(不会影响在同一台计算机上工作的其他用户)的情况。 还可以在与登录用户或默认计算机帐户不同的特定用户帐户的安全性上下文中运行服务。
2、Windows 服务组成:
一个服务可执行文件;一个服务控制程序(SCP);服务控制管理器(SCM),负责在 HKLM/SYSTEM/CurrentControlSet/Services 下创建服务键值。用户可通过 SCP 控制服务的启动、停止、暂停等,SCP 会通过 SCM 调用服务程序。
第一部分Service Control Manager(SCM)。每个Windows NT/2000系统都有一个SCM,SCM存在于Service.exe中,在Windows启动的时候会自动运行,伴随着操作系统的启动和关闭而产生和终止。这个进程以系统特权运行,并且提供一个统一的、安全的手段去控制服务。它其实是一个RPC Server,因此我们可以远程安装和管理服务,不过这不在本文讨论的范围之内。SCM包含一个储存着已安装的服务和驱动程序的信息的数据库,通过SCM可以统一的、安全的管理这些信息,因此一个服务程序的安装过程就是将自身的信息写入这个数据库。
第二部分服务本身。一个服务拥有能从SCM收到信号和命令所必需的的特殊代码,并且能够在处理后将它的状态回传给SCM。
第三部分Service Control Dispatcher(SCP)。它是一个拥有用户界面,允许用户开始、停止、暂停、继续,并且控制一个或多个安装在计算机上服务的Win32应用程序。SCP的作用是与SCM通讯,Windows 2000管理工具中的“服务”就是一个典型的SCP。
3、服务权限
进程、线程、文件、注册表键、信号、事件等等等都属于一个用户。当一个进程被产生的时候,它都是执行在一个用户的上下文(context),这个用户帐号可能在本机,也可能在网络中的其他机器上,或者是在一个特殊的账号:System Account——即系统帐号的上下文。如果一个进程正在一个用户帐号下执行,那么这个进程就同时拥有这个用户所能拥有的一切访问权限,不论是在本机还是网络。系统帐号则是一个特殊的账号,它用来标识系统本身,而且运行在这个帐号下的任何进程都拥有系统上的所有访问权限,但是系统帐号不能在域上使用,无法访问网络资源…服务也是Win32可执行程序,它也需要执行在一个context,通常服务都是在系统账号下运行,但是也可以根据情况选择让它运行在一个用户账号下,也就会因此获得相应的访问资源的权限。
二、将程序注册为服务
1.下载两个文件Instsrv.exe和srvany.exe两个文件,放在C:\WINDOWS文件夹下(或者其他路径都可以);
(注:*要获取SrvAny和SrvInst:请访问 http://www.microsoft.com/downloads, 在“关键字”字段中输入Windows 2003 Resource Kit Tools,然后单击“转到”。
*然后,单击Windows Server 2003资源工具包工具中的Windows Server 2003资源工具包下载按钮。
*要下载rktools.exe(包含Instsrv和Srvany的最新版本)的网页,并运行可执行文件以在系统上安装工具。
https://www.microsoft.com/en-us/download/details.aspx?id=17657
)
2.启动cmd,运行“instsrv remoting c:\WINDOWS\srvany.exe”添加一个名为remoting的服务;
当然,如果cmd的提示路径不是c:\WINDOWS\的话需要先用“cd”转换路径
3.在注册表中为新建的remoting服务设置关联和参数:
a.在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中找到新创建的remoting;
b.点击remoting选择“新建——项”,将其命名为Parameters.
c.选定Parameters,在右侧窗口建立三个字符串值:Application,AppDirectory和AppParameters,
将Application的数值数据设置为应用程序exe文件的绝对路径:D:\系统数据\临沂系统\服务\remoting\LY.UG.GISServer.exe
将AppDirectory的数值数据设置为上一步exe文件存放的文件夹:D:\系统数据\临沂系统\服务\remoting\
4.在计算机——管理——服务中启动remoting服务:
a.找到remoting服务;
b.remoting服务上右键属性,在“登录”选项卡选“本地系统帐户”,如果服务运行时,不需要出现窗体等控件则不勾选“允许服务于桌面交互”,此例中不勾选。
c.启动服务。
5.完成把一个应用程序添加为windows服务。运行中的remoting:
引用:https://www.cnblogs.com/fatherZyl/p/3651374.html
服务三种登陆行为
1、Local System(本地系统)
2、Network service(网络服务)
3、Local Service(本地服务)
注:运行于本地服务下的进程和运行于Network Service账户下的进程的区别在于运行Local Service账户下的进程只能访问允许匿名访问的网络资源。
服务操作的几个命令
1、net 用于操作没有禁用的服务
net start 服务名一>启动服务
net stop 服务名一>停止服务
2、sc用于所有服务
sc query 服务名 -----查询服务
sc stop/start 服务名 ----开启/关闭服务
sc qc 服务名 -----查运行状态
sc config /?------在注册表和服务数据库中修改服务项。
sc create 服务名 type= 类型 binpath= 路径 —创建服务
sc delete 服务名 —删除服务
wmic service get---列出所有服务
在vs中创建服务
//创建服务
SC_HANDLE hService = ::CreateService(
hSCM, //服务控制器句柄了
szServiceName, //创建的服务名称 最长256个字符 无大小写之分 不能包含/和/字符
szServiceName, //显示的名称 最长256个字符 无大小写之分
SERVICE_ALL_ACCESS, //访问权限
SERVICE_WIN32_OWN_PROCESS,//服务类型
SERVICE_DEMAND_START, //指出服务何时开始
SERVICE_ERROR_NORMAL, //指出启动出错后如何处理
szFilePath, //生成可执行文件路径 如果路径包含空格 要用引号
NULL,//如果服务属于组,则制定顺序装入服务组名
NULL, //用来接收标志值,在组中使用的
_T(""),//制定启动该服务前要启动的服务或服务组
NULL,//以NULL结尾的字符串,指定服务帐号,如果为NULL则是LocalSystem帐号
NULL); //以NULL结尾的字符串,制定对应的口令,LocalSystem时为NULL
//创建服务后关掉句柄
::CloseServiceHandle(hService);
::CloseServiceHandle(hSCM);