KIS专业版登录时出现问题请重新输入终极解决全过程.docx
《KIS专业版登录时出现问题请重新输入终极解决全过程.docx》由会员分享,可在线阅读,更多相关《KIS专业版登录时出现问题请重新输入终极解决全过程.docx(21页珍藏版)》请在冰豆网上搜索。
![KIS专业版登录时出现问题请重新输入终极解决全过程.docx](https://file1.bdocx.com/fileroot1/2023-2/6/34e704a2-e729-4414-b0af-c8ff7f3ee4b3/34e704a2-e729-4414-b0af-c8ff7f3ee4b31.gif)
KIS专业版登录时出现问题请重新输入终极解决全过程
金蝶KIS专业版“登录时出现问题,请重新输入”终极解决全过程
(注,本文较长,但如果您能够耐心看完,相信一定会有所收获!
本文由昆明苏博泰克计算机有限公司郭永林原创,在金蝶博客以狂啸三声名义发布。
解决问题时花了大半天,整理撰写和排版又花了一整个晚上,因此转载收藏时请保留此说明,谢谢。
)
目录
金蝶KIS专业版“登录时出现问题,请重新输入”终极解决全过程1
一、从客户端PING服务器,检查网络状况2
二、测试访问服务器共享文件夹2
三、修改host解析文件3
四、关闭或配置防火墙3
五、关闭数据执行保护3
六、重新安装msdtc组件3
七、重新分析过程及问题的根本原因3
八、终极解决办法之一:
注册表添加别名法3
九、终极解决办法之二:
客户端网络工具添加别名法3
十、终极解决办法之三:
ODBC添加数据库访问别名法3
十一、其他可能遇到的情况3
十二、总结3
好久没做专业版,现在做了一个。
想不到居然遇到了传说的“登录时出现问题,请重新输入”提示。
如下图所示:
我狂晕啊,印象中好像很多人都遇到过,想不到我也会栽到它头上。
我装了那么多K3经过一番配置都没再出过登录不了的问题啊!
由于是所有客户端都这样提示,所以判断肯定服务器配置存在问题,好吧,动手排查:
一、从客户端PING服务器,检查网络状况
结果如下:
哎呀,不管是用IP地址“192.168.1.200”还是用服务器名称“KIS”,返回值都正常,看来网络相当正常。
二、测试访问服务器共享文件夹
从开始――运行中输入“\\192.168.1.200”,结果出错,提示如下:
由于错误,登录失败:
用户帐户限制。
可能的原因包括不允许空密码,登录时间限制,或强制的策略限制。
服务器无法登录WindowsNT帐户‘192.168.1.200\GUEST'。
看来是网络权限配置过于严格,于是采取以下办法处理:
1.右击我的电脑,选择“管理”,在左边依次展开“计算机管理”――“系统工具”――“本地用户和组”――“用户”,检查“GUEST”用户是否是打“X”禁用,如果是,则右击属性,然后取消禁用选项。
2.从“开始”――“运行”,输入“gpedit.msc”,进入到组策略管理界面下,依次展开“计算机配置--->Winsows设置----->安全设置--->本地策略--->用户权利指派”,看看右边有一行:
"拒绝从网络访问这台计算机"看它的属性里有没有guest一项,若有,则删除。
3.开始――运行,输入gpedit.msc回车—计算机配置—windows设置—安全设置—本地策略—安全设置—“账户:
使用空白密码的本地账户只允许进行控制台登录”--改为“已禁用”。
OK,再测试,试了几台客户端都正常了。
我有预感,不会这么简单!
果然,到最后两台,功亏一篑啊,不行!
!
!
不过,现在服务器肯定是没有问题了,得查客户端了,根据网友们总结的办法,一步一步排查吧。
三、修改host解析文件
找到C:
\WINDOWS\system32\drivers\etc下的HOSTS文件,用记事本打开并添加服务器的记录(这个前提要求服务器的IP得是手工指定的IP啊,要是动态获取的话,今天添加了今天有用,明天IP变了就白添加了):
192.168.1.200KIS
四、关闭或配置防火墙
关闭防火墙包括WINDOWS自带的,或者其他软件防火墙。
如果不关闭的话,也可以通过其他设置,如开放端口。
TCP:
135、139、445、1069、1090、1433、2967、6985、6988;UDP:
137、445、1033、1434、1058、2123、3000。
或者采用添加到白名单:
设置--详细设置--网站防问规则--白名单--增加192.168.1。
200。
OK,其中一台通过以上步骤后也可以了。
但另一台死活不行,只能继续其他可能影响的设置修改。
五、关闭数据执行保护
通过修改BOOT.INI文件,添加或修改参数:
NoExecute=AlwaysOff
六、重新安装msdtc组件
1、删除注册表中的键:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
HKEY_CLASSES_ROOT\CID
2、运行命令停止MSDTC服务:
netstopmsdtc
3、运行命令卸载MSDTC服务:
msdtc-uninstall
4、运行命令重新安装MSDTC服务:
msdtc–install
结果依旧,最后这台电脑真的是顽固啊!
好吧,网上能够找到的都试完了,看来得自已动手分析了。
七、重新分析过程及问题的根本原因
仔细观察登录时的错误提示,当服务器处输入的是计算机名“KIS”时,如下图:
当服务器处输入的是IP地址“192.168.1.200”时,如下图:
得到的结论是:
输入IP和计算机名,得到的结果不相同。
输入IP能够获取账套信息,而输入计算机名则连账套信息均不能获取。
但是,既然输入IP已经获取到账套信息,由于我们知道KIS的专业版的账套信息是存放在SQL数据库中的,说明通过IP连接数据库是一切正常的了。
那么,现在我们已经在服务器中输入IP地址来连接数据了,为什么选择了账套后再确定,还是登录不了呢?
难道金蝶最终并没有真正使用IP地址来连接数据库,而是又重新使用计算机名来连接了吗?
为了验证我的想法,我在服务器上打开了账套信息数据库“AcctCtl”,找到其中的表“t_ad_kdAccount_gl”。
呵呵,果然是这样,其中的“FConnectString”字段记录了每个账套的连接字符串,形如:
“Provider=SQLOLEDB.1;UserID=KISAdmin;Password=ypbwkfyjhyhgzj;DataSource=KIS;InitialCatalog=KIS_Sample”,根据我们二次开发的经验,金蝶KIS专业版在通过登录时,获取到账套信息后,显然是用账套信息中的连接字符串再进一步的查询数据了。
上述分析也说明了为什么先前一台电脑通过修改HOSTS能够正常访问了:
我们在登录时输入的IP地址仅用于获取账套信息,而之后系统再次使用计算机名访问数据库,所以当由于某些系统服务未开启或防火墙软件的原因,计算机名不能正确解析时,HOSTS文件就生效了,帮助系统将计算机解析为IP地址,然后即可正常访问了。
但是,为什么最后一台还是不行呢?
金蝶KIS专业版将错误提示封装了,就好像IE浏览器的“错误友好提示”一样,让人摸不着头脑。
那么要尝试找找有没有更详细的信息了,经过一番搜索,在C:
\WINDOWS\SYSTEM32\KISCOM\中找到一个登录的错误日志文档“KISSVRMGR_1001.log”,用记事本打开一看,内容主要形如:
01-2909:
25:
24[ERROR]AcctMgr:
:
GetAccountList()
Errornumber:
-2147217843
Source:
MicrosoftOLEDBProviderforSQLServer
Desc:
用户'KISAdmin'登录失败。
01-2909:
25:
48[ERROR]AcctMgr:
:
GetSuperPropString()
Errornumber:
-2147467259
Source:
MicrosoftOLEDBProviderforSQLServer
Desc:
[DBNETLIB][ConnectionOpen(Connect()).]SQLServer不存在或拒绝访问。
哎……,还是封装过的,不好判断啊。
那么,有没有办法显示更直接的提示呢?
既然用KIS专业版不行,那么咱们用SQL自带的客户端工具来登录试试!
!
!
客户端一般没有安装SQL,没关系,打开随身携带的绿色版SQL管理工具“SQLManager”(也就是企业管理器和查询分析器的独立打包)。
使用查询分析器“isqlw.exe”来测试登录效果。
输入IP地址和用户名密码,果然能够正常登录。
再输入计算机名和用户名密码,也同样不出意料,没能够正常登录,弹出了以下错误:
细心的读者您注意到了吗?
错误提示中有什么东西和一般不同?
对,就是多了“[Multi-Protocol]”这个词。
上网再一番狂搜,获得许多杂乱的信息,我将各处信息综合整理如下:
客户端与服务器的连通需要通讯库的支持,SQLServer2000的通讯库NET-LIBRARY网络协议通信库支持多种网络协议:
1.Namedpipes协议(命名管理),使用NTSMB端口(TCP139,UDP137,138)来进行通信;
2.IPSockets协议(TCP/IP),使用TCP1433端口;
3.Multi-Protocol(多协议),默认情况下使用TCP随机端口,客户端需要支持NTRPCs;
4.NWLink协议;
5.AppleTalk(ADSP)协议;
6.BanyanVines协议。
但一般来说,我们平常使用都是选择TCP/IP或命名管道协议通信库。
遇到SQL Server 不存在或访问被拒绝的问题,我们就应该检查这些协议的配置情况,保证服务器和客户端使用同一种通讯协议即可。
检查服务器端的网络配置是否启用了命名管道、TCP/IP协议等等。
我们可以利用SQLServer自带的服务器网络使用工具。
点击:
程序->MicrosoftSQLServer->服务器网络使用工具,打开该工具后看到的画面如下图所示:
从这里我们可以看到服务器启用了哪些协议。
一般如上图可能只启用了命名管道和TCP/IP这两种协议,所以客户端如果使用其他协议连接将会连接不上。
如需进一步检查SQKServer服务默认端口的设置,我们可以点中TCP/IP协议,再点击"属性",如下图所示:
一般而言,我们使用SQLServer默认的1433端口。
对于"隐藏服务器"选项,只是限制客户端通过枚举服务器来枚举这台服务器,仅是保护功能,不影响连接。
客户端连接服务器是也是通过NET-LIBRARY网络协议通信库实现的,微软的MDAC组件提供了NET-LIBRARY网络协议通信库,如DBNMPNTW.DLL——命名管道协议和DBMSSOCN.DLL——TCP/IP协议,其上层的数据库访问基本组件ADO、OLEDB、ODBC、DB-LIBRARY等都是在此基础上实现与服务器的数据访问通讯的。
打开客户端网络工具,如下图所示:
如果没有安装SQL客户端工具,但成功安装MDAC28之后,也可以对系统注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo
下面各配置项的查看和修改来实现对客户端网络使用属性的配置。
这个配置节点下面的配置项实际上该客户端可以连接的服务器别名列表。
服务器的别名是客户端应用程序用来连接的服务器的伪名称,其连接属性参数中的服务器是真正的服务器名称,两者可以相同或不同。
服务器别名的定义规则如下:
<服务器别名>=<网络协议通信库>,<连接属性>
假定我们有一个SQLSERVER2000服务器SQL_SERVER,具有实例TESTDATA,IP地址为10.10.10.10,定义其别名为DATASERVER,服务器上同时支持命名管道协议和TCP/IP协议,且TCP/IP的默认端口为1433。
对于命名管道协议,则别名配置如下:
DATASERVER=DBNMPNTW,SQL_SERVER\TESTDATA
或
DATASERVER=DBNMPNTW,10.10.10.10\TESTDATA
注意,这里的服务器机器名SQL_SERVER和服务器IP地址10.10.10.10是等价的。
有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用IP地址来直接指定;这与下文将要提及的HOST文件方式有异曲同工之处。
对于TCP/IP协议,则别名配置如下:
DATASERVER=DBMSSOCN,10.10.10.10\TESTDATA,1433
注意,这里使用服务器的IP地址10.10.10.10,和指定的1433端口需保持和服务器一致。
有时,客户端缺少相关的组件DLL也可能会导致无法连接,此时,应检查网络库中所需的组件DLL文件,如下图所示:
如果缺少上图所示相关组件,请到服务器中拷贝同名文件到本地并用regserver32.exe注册。
至此,真相大白,原来是通讯协议惹的祸。
我们参考上述资料,可以通过修改注册表或者利用客户端网络工具来添加别名的方法来解决问题,方法如下:
八、终极解决办法之一:
注册表添加别名法
修改注册表HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\ConnectTo中DSQUERY的键值为DBNETLI;
然后在HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\ConnectTo中增加别名项,键名为KIS,值为:
DBMSSOCN,192.168.1.200,1433;
九、终极解决办法之二:
客户端网络工具添加别名法
那么,万一我们手中没有客户端网络工具,又怕修改注册表格式易出错,该怎么办呢?
且看山人妙计(事实上我在客户这边也是按以下方法处理的,因此个人推荐使用以下方法):
一十、终极解决办法之三:
ODBC添加数据库访问别名法
从开始菜单中打开控制面板,找到管理工具中的ODBC数据源:
先检查看系统原来是怎样的,选择“LocalServer”之后,点击“配置”,再在弹出的对话框中点击“下一步”:
再在又弹出的对话框中点击“客户端配置”,如下图所示:
确实选择了Multiprotocol多协议。
将其改正如下:
当然,这样做还是不够的。
这只是修改了本机默认的访问协议,我们的目的主要是添加服务器的别名,准确说,只有按如下操作之后才能够对我们的KIS专业版系统生效:
在上述图示上点击“添加”按钮,再出现下图:
点击上图的“完成”按钮后,将出现下图:
再点击“下一步”,出现下图:
再点击了“客户端配置”之后,出现下图:
按上图再根据您的实际情况填写,这步是最关键的一步,切记!
!
!
然后点击“确定”按钮:
在回到的上图中,再按以上内容填写,再点击“下一步”:
再在上图中点击“下一步”,出现下图:
再在上图中点击“完成”按钮,出现下图:
点击“测试数据源”,按理应该是成功的,如下图:
点击“确定”后,回到之前的对话框,再点击“确定”即可完成数据源的添加,结果如下图所示:
至此,重新登录金蝶KIS专业版进行测试,没有悬念,顺利登录,大功告成!
!
!
一十一、其他可能遇到的情况
1.修改服务器计算机的名称后,由于账套数据库里的信息还是原计算机名称,所以需要登录一次账套管理,系统将会自动更新账套数据库里边的记录。
否则也会出现这样的提示。
2.如果有多个账套,其他账套正常,只有其中有一个账套登陆时出现这样的提示,则可能是该账套数据库有问题,请检查LDF日志文件是否过大,将其收缩之后再登录。
一十二、总结
或许,您所遇到的问题不一定和我完全一致,但我想分析问题的思路应该是一致的,可以借鉴的。
尤其是,当KIS专业版自身的提示不明确时,我们通过用SQL自带的客户端工具来登录,以暴露出真实的问题提示!
这个方法是我整个分析过程的核心。
当然,也有其他一些方法,例如比较不同客户端登录情况来排除服务器问题等是非常基本也非常有用的方法。
而且,当大家通过本文了解了KIS专业版登录的过程和SQL访问的协议和原理之后,相信其他类似的问题大家也就能够很快找到解决的办法了。
根据总部何志权(社区lz_xiaohe)先生提示,此原理应该同样适用于金蝶KIS商贸版,因为专业版和商贸版的登录原理应该是类似的。
但由于我个人没有安装商贸版进行过测试,有兴趣的读者可以自行测试一下。
最后,希望此文能够给大家一些启发和帮助,至于题目的“终极解决”,则是标题党作法了,名不符实之处,请大家一笑了之。