C/S端开发问题汇总

0、先推荐几款工具,连接远程客户端DameWare Mini Remote Control,搜索本地文件Everything,以及sysinternals的系列工具:

FileMon-监视所有文件修改、RegMon-监视所有注册表修改、ProcessExplorer-任务管理器、ProcessMonitor-监视进程对文件+注册表的所有操作

SigCheck-识别文件头+签名+对应的pbd、TcpView-监视所有tcp连接、PsTools系列工具-操作所有本地+远程进程

1、在一些基于Server 2008 R2的终端机上,经常会出现多用户进程抢占同一文件(比如menuverison.ini)的问题,报IOException,对路径的访问被拒绝。

类似的,多个进程写同一个xml文件时,会报“缺少根元素”或“根级别上的数据无效”,应该也是类似的问题。

答:这类问题用lock{}是不够的,lock(Monito)只能同步单进程里多个线程对资源的访问,这种跨进程的同步要使用内核锁,比如基于事件的AutoResetEvent或基于信号量的Mutex。

2、未能加载文件或程序集xxx.client.dll或它的某一个依赖项。

答:这是客户端更新程序下载dll不完整引起的,初步认为是网络层面的问题,导致文件接收不完整。不妨讨论一下客户端的更新策略:

1)用一个单独的更新程序updator更新dll和resource文件,更新程序可以在系统启动前检测、也可以以服务的形式在services.msc里运行。

2)更新内容打包成msi/exe/补丁包的形式,更新程序只负责检测、下载、安装更新包。

3)也可以做成安装包后,由企业域推送、SCCM、VRV等工具推送到用户机器上。

注:方法2保证了文件的完整性,但要求用户有管理员的安装权限,在企业环境里还不如用方法3。方法1需要用hash值等方法验证文件的完整性,不然就容易出现如上错误。

3、用户机器上大规模报出ora-12500、ora-12535、ora-12541等错误。

答:DB服务器上%ORACLE_HOME%/Network/log/listener.log里的日志如下:

TNS-12500: TNS: listener failed to start a dedicated server process

TNS-12540: TNS: internal limit restriction exceeded

TNS-12560: TNS: protocol adapter error

TNS-00510: internal limit restriction exceeded

HPUX Error: 11: resource temporarily unavailable

看起来主要是tns无法启动进程,db服务器是8核CPU、64G内存,实际只用了32G。从oracle来看,用户session数只有200,没有达到最大值300。因此猜测是服务器的设置问题,搜索一下,据说可以把maxupro=nproc*90%,原本maxupro为256,改成3000,同时把ulimit->nofiles从2048改为4096,貌似问题得到了缓解,用户session也顺利超过200。

4、ftp服务器平时正常,某天突然拥堵,ftp server里看到大量客户端排队,每个客户端速度只有3K左右。不抛错不出异常,进度条始终停在下载处。

答:一开始在DB服务器里输入netstat -ano | findstr TIME_WAIT > netstat.log看到有大量的TIME_WAIT状态。注意到client.config->customBinding->httpTransport->keepAliveEnabled=false,设置为true后是否能用client端的长连接代替多次的短连接。设置后,DB服务器里TIME_WAIT确实下去了,但ftp服务器还是会偶尔出现拥堵的情况。后来,考虑到这个情况是偶尔出现的,应该与代码无关,由运维室监控网络层面,发现这台机器丢包很严重。监测下来,ftp服务器有1G的带宽,但直连的路由器只有百M的速度,后来换路由后解决问题。

5、ClickOnce无法启动应用程序,激活appref-ms异常。

答:猜测是由于ClickOnce更新到一半,网络问题或是ClickOnce自己的Bug造成的程序文件损坏或与注册表中的版本不一致。

解决方法:1)将c:Documents and Settings 176197Local SettingsApps下的2.0文件夹删除,重新打开桌面图标即可。

2)或者打开Regedit,将HKEY_CURRENT_USERSoftwareClassesSoftwareMicrosoftWindowsCurrentVersionDeployment节点下的所有内容全部删除,重新双击桌面的appref-ms图标即可。

6、第三方控件相关问题:regsvr32注册:DllRegisterServer失败,返回代码是0x80004005。或报检索COM类工厂中CLSID为{4764040E-4222-4DEC-9F2E-82D46E212B3A}的组件时失败,原因是出现如下错误0x80040154。

答:1)由于域环境下,用户没有安装权限、也没有注册com组件(常见的如水晶报表CrystalReport、PDF控件PDFSDK、FastReport等)的权限。所以新装的机器很容易出现控件未注册的问题。只需要以管理员权限注册即可,如果权限不足,会报上述0x错误。

runas /user:domainadmin cmd

regsvr32 fastreport3.dll

cacls c:client /t /g everyone:C

2)有时Guid指向的是wshom.ocx组件,可以把自己机器上的wshom.ocx拷贝到用户机器上,用管理员运行 regsvr32 c:windowsdwrcsuploadswshom.ocx,注意不加/i选项,OK!

7、Client更新出错,弹出MessageBox说对系统Temp目录无访问权限。

答:在使用临时目录时,有时会出现获取到的临时目录没有权限。一般来说,调用Path.GetTempPath()方法应该返回用户的临时目录,比如c:Documents and SettingsuserLocal SettingsTemp。但某些用户切换过用户目录后,出现以wangyu1登录,登录成功后开始菜单里显示的是wangyuwy(估计是iNode里设置的用户名),但在c:Documents and Settings里的目录名却是wy。由于Path.GetTempPath()里调用的是Win32Native.GetTempPath,所以只能猜测这个方法想按照用户名wangyu1去获取临时目录,没取到,于是取系统临时目录,但是又没权限。

解决方法:1)备份用户资料->注销当前用户(或者直接重启,否则已经登录过的用户无法删除)->以管理员身份登录->系统属性->高级->用户配置文件->删除错误的用户->注销->以正确的用户名登录->创建对应的文件夹->把备份的资料覆盖回来。

2)简单的方法是:给系统临时目录赋every读写权限,cacls c:windows emp /E /G everyone:C

3)也有可能是C盘空间不足,不妨cleanmgr /sagaset:99,清空所有回收站、压缩旧文件。

8、TCP error code 10048通常每个套接字地址(协议网络地址端口)只允许使用一次。

答:问题其实很明确,可以从以下几个方面考虑:

1)是否所有client都指定同一个server端口;

2)client每次通信完成后是否有释放端口资源;

3)是否服务端开启的端口数太少,不够用?

4)是否client要求的并发量太大?

这几点会导致服务器端口被占满,无空闲端口可用。我们client里都未指定特定端口,而且都用using{}包裹及时释放。但client.config里keepAliveEnabled=true应该改为false,否则会持续占用端口。然后也可以调整服务端的资源上限,修改服务器配置,提升端口上限、降低超时时间,如下:打开regedit->找到HKLMsystemCurrentControlSetServicesTcpipParameters,新增2项MaxUserPort=65534, TcpTimedWaitDelay=5,重启服务器即可。

9、IIS里某个应用程序池(比如: /LM/w3svc/3/root/Service)里的所有服务报OutOfMemoryException异常。

答:IIS在运行过程中,每月都会出2-3次内存不足的异常,在替换服务的dll后,也会出现这个异常。出错时能看到某个应用程序池占用1.8G以上的内存。可以手工强制回收对应的程序池,也可以设置内存超过1.5G时触发回收。当然,最重要的还是代码里尽量在DB端过滤数据,而不是取到内存里再计算。

10、1)某个service.dll应该有14M,但用vs2005生成出来只有372K,并且报生成成功。2)同一个文件,增长到16.5M时,报fatal error cs0013: 将元数据写入文件objdebugservice.dll时发生错误。

答:1)的情况下,改用msbuild可以正确生成。2)的情况下,msbuild和csc也报同样的错误。并且xp/win7/server 03、vs2005/vs2010下都稳定报错。分析下来,应该与项目里包含的字符串总长度有关系。因为去掉其中某一两个文件,生成能成功,甚至删除其中一部分代码或另一部分代码,也能成功。写了个测试项目试了下csproj里到底能包含多少字符串:

试下来,生成一个超大的test.cs文件,56个字符×130000时会报cs0013,14个字符×430000时也报cs0013。不过细节不同:fatal error cs0013: unexpected error writing metadata to file -- 没有剩余的逻辑空间来创建更多用户字符串。

虽然错误不完全一致,但猜测是项目里包含了太多的字符/变量/资源等,超出了某个限制,结论是只能拆分项目。

11、DataWindow下拉框一闪即逝,搜狗拼音4.3与dw不兼容

答:满足2个条件,会出现这一问题:1)用户把所有输入法全删了,只保留搜狗拼音输入法v4.3.0.3315正式版;2)点击DataWindows下拉框。

一般来说,点击不允许输入的控件时,输入法会自动关闭或切换到英文状态。尝试使用紫光拼音、微软拼音都正常,Dx下拉框也正常,搜狗v6.0.0.5972也正常。因此认定是搜狗v4.3的一个Bug。

12、远程服务器返回错误(400)错误的请求

分析:1)登录Client时调用GetMacIpInfo后客户端GetResponse时出错。

2)值得注意的是,直接用浏览器调用rest服务是OK的,而用代码访问会出错。

3)尝试用Reflector8对比正确、错误的dll,发现加密前的版本是正确的,加密后的版本出错。再进一步对比发现,正确的加密dll参数未被混淆,而错误的加密dll参数如下:public DataTable GetMacIpInfo(string 001llll1010, string 0l1000ll1, string 011010ll)

4)最终在使用MaxtoCode加密服务dll时,去掉参数混淆选项即可。

13、无法找到字体Arial //未解决

在System.Drawing.FontFamily.CreateFontFamily(string name, FontCollection fontCollection)

在System.Drawing.FontFamily..ctor(string name)

分析:1)用户Client里的英文很小,中文显示正常。

2)奇怪的是,用户C:windowsFonts里已经有Arial字体了,安装对应字体、复制到Fonts目录后也无效。

3)在win7已安装的字体,有些并未显示,需要到Fonts里右键点击显示。xp里还需要对字体文件添加everyone读取+读取和运行权限。

14、Dx导出PDF时中文显示为乱码。

答:1)Dx默认字体是Tahoma,不支持中文,导出时可以改用Arial Unicode MS。

2)但有些机器没有预装Arial Unicode MS字体,打开导出的PDF时中文会显示为“This font is not yet supported”。手工安装即可。也可以使用一些更常见的字体,比如仿宋、楷体等。

3)当然,也可以在导出的时候,判断用户机器上是否存在某个字体,并把该字体嵌进去,保证在其他机器也能正常打开。

15、此IP Address(0.1.0.4)不能登录系统。

答:安装过摄像头、或者TV卡的机器上,会出现一个0.1.0.4的虚拟IP,拔出设备或者注销重启之后就没了。ipconfig里能看到:

Description:Microsoft TV/Video Connection

Physical Address:00-00-00-00-00-00

Autoconfiguration IP Address:0.1.0.4

Subnet Mask:255.255.255.255

需要在获取到的IP列表里过滤掉这种无效IP和IPv6的地址,或者针对内部应用,可以用正则表达式判断IP的有效性。

16、对于某些大事务长时间运行时,会由于事务超时引发异常:无效操作,连接被关闭。

答:这个问题详见:这篇随笔

17、双击ClickOnce更新程序时报“无法安装或运行此应用程序,该应用程序要求首先在全局程序集缓存gac中安装程序集system.identityModel 3.0.0.0”

答:ClickOnce的错误可以先去事件管理器里看看,微软的程序一般出错了都会在事件->应用程序里留下出错信息。

1)对于这个错误,报dll在gac里找不到,去c:windowsassembly里确认一下,确实没有,也可以用gacutil确认。于是把好的机器上的c:windowsassembly目录打包,用管理员权限覆盖上去,能更新了。//有点暴力

2)但更新的过程中报错:Faulting application client.exe, faulting module mscorwks.dll, version 2.0.50727.3620 | .net runtime verison 2.0.50727.3620 - 执行引擎错误,好的机器上mscorwks.dll的版本是2.0.50727.3634,用管理员权限替换即可。估计是xp sp3的补丁没打上。

18、ClickOnce Your web browser settings do not allow you to run unsigned applications.

答:IE工具->Internet选项->高级->安全选项卡->勾上“允许运行或安装软件,即使签名无效”

IE工具->Internet选项->安全->点击“可信站点”->点“站点”->去掉“对该区域中所有站点要求服务器验证(https)”->输入ClickOnce所在站点->点击添加

19、NetUtil.GetMacAddresses出错,ManagementClass抛出ManagementException,3类异常分别是“找不到”、“数据错误(循环冗余检查)。(异常来自HRESULT: 0x80070017)”、“拒绝访问。(异常来自HRESULT 0x80070005 E_ACCESSDENIED)”。

答:1)第一类异常not found,在StackOverflow上找到一个帖子,说wmi的repository运行的过程中可能出错,需要让它自行重建。对于xp sp2的机器,输入以下命令:rundll32 wbemupgd,UpgradeRepository。执行后在logssetup.log里报错80041002,对象找不到(找不到类别、范例或属性)。8004100E,命名空间找不到。再次尝试,在管理员命令行里,依次执行:net stop winmgmt->重命名c:windowssystem32wbemRepository为Repo_bad之类的->net start winmgmt,这样wmi会自行重建。

2)第二类异常数据错误,看起来是文件CRC校验出错,使用chkdsk C: /R在下次重启时检查文件,或在重启后,使用安装盘里的磁盘检测工具把整个磁盘修复一下就OK了。

3)第三类拒绝访问,看起来是权限问题,对目录c:windowssystem32wbem添加everyone的修改权限,重启后OK。

4)另外还提到一套wmi diagnosis utility,看起来很强大,还没试过。

20、client遇到问题需要关闭,我们对此引起的不便表示抱歉。

答:我们在Application.ThreadException和AppDomain.CurrentDomain.UnhandledException里抓了所有未处理的异常,但这个问题并没有被抓住,可以认为程序启动时加载依赖项就发生错误了,但这是事后才想到的。

1)一开始遇到这个问题的第一反应,是去事件管理器里看有无线索。但事件管理器里只有faulting application client.exe, faulting module kernel32.dll, version 5.1.2600.5781, fault address 0x00012afb,事件ID=1000, 比较了一下用户和我机器上的kernel32.dll、mscorlib.dll、mscorwks.dll这几个经典dll,替换了版本不同的,打开仍然出错。

2)后来走上了偏路,看到stackoverflow上一个帖子说可能资源被其他程序占用或泄漏了,觉得有点道理:some app is stealing some global resources as ou experience trouble with other applications. App like notepad do not use much resources so appear to work fine, heavy apps are more likely to show up the trouble。于是查看任务管理器,发现我xp上38955个handles,win7上75211个handles, 但用户机器上有259071个handles,把占用句柄最多的几个程序NTRtScan、VRVEDP_M、某个svchost,趋势杀毒等杀掉之后,仍然报相同的错误。后来我想到,如果是资源不够用,那多开几个word+excel+ps+foxit pdf+video,如果没问题,应该能去除这个可能性。

3)然后终于走上了正路,用sysinternals的ProcessExplorer生成client.exe的full dump文件,安装win7的symbols之后加载dump并分析,能得到比较详细的堆栈信息,能看到是在mscorwks获取元数据时出错然后调用kernel32抛异常的。

kernel32!RaiseException+0x52

mscorwks!GetMetaDataInternalInterface+0x84a9

mscorwks!CopyPDBs+0x39f8

mscorwks!LogHelp_LogAssert+0x5448

这里其实已经指向了真正的问题所在,是加载dll的元数据时出错,但是没指出真正出错的dll。

4)最后重启用管理员登录,再dump出一个full.dmp,这次用windbg一分析(analyze -v),居然一目了然的指出“未能加载common.dll",一看用户机器上出错的dll只有260K,正常应该有3.25M,直接更新这个文件即可。奇怪的是里面明明是个net的异常System.BadImageFormatException,为什么没有以.net的异常抛出呢?呵呵

5)教训是1》这次又是由于dll更新不完整造成的,只是更加隐藏,更新文件的时候不加CRC或hash验证真不行啊。2》似乎用域用户权限dump出的信息不全,还是要用管理员权限生成full dump。3》windbg确实比较牛,还是要认真学一学。

21、未能加载文件或程序集DataWindowInterop, Version=2.0.6662.0或它的某一个依赖项,试图加载格式不正确的程序

答:乍一看是个类似的问题,但更新这个dll仍然出错,猜测是环境和os的问题,换一台win2003的机器是OK的。后来注意到用户的系统是win7 x64位的,我们的client.exe依赖了DataWindowsInterop.dll。用Reflector打开client和dwi,都是any cpu的。右键->属性->兼容性->用xp sp3兼容模式运行client.exe,还是报同样的错误。再把client用x86生成,再跑就OK了。这似乎说明client是以x64运行的,并且希望找到dwi的x64位版本,而标识为any cpu的DataWindowsInterop其实是x86的,并不支持x64,所以格式并不正确。解决:要么为用户生成一个dwi64位的版本,要么换一个32位的环境。

22、无效操作,连接被关闭。检测到ContextSwitchDeadlock,Message:CLR无法从COM上下文0x1ad008转换到COM上下文0x1ad178,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送windows消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。

答:这个错误本身是单线程单元执行时间过长导致的,怎么解决方向不明确。后来跟踪调试的时候发现有一段sql查询很慢,涉及到一个1300万数据量的表。查询的时候,使用了一个手工添加的索引,去掉之后,查询使用主、外键索引,速度快了之后也就没报这个问题了。

23、多用户终端服务器上较容易出现磁盘空间不足造成client无法更新。

答:1)以本地管理员的权限rd /s c:$Recycle.Bin,因为很多年纪大的用户只会del,不会shift+del

2)在磁盘清理里,添加计划任务:每周六早上1点做c盘清理

3)考虑在gpedit.msc中禁用回收站,避免C盘空间的积累

24、本机无法连接远程桌面+此系统的本地策略不允许您采用交互式登录

答:1)查看本机,发现系统属性->远程->远程桌面是关闭的

2)注销换管理员账号进去,发现这个选项是灰的。在services.msc里启动NetMeeting Remote Desktop Sharing服务,总也无法启动

3)打开gpedit.msc,计算机配置->管理模板->windows组件,发现没有“终端服务”这一项。

4)右键管理模板->添加/删除模板->添加,把所有.adm文件都添加进去,就能看到“终端服务->允许用户使用终端服务远程连接“,选择已启用即可。

5)这时远程桌面是打开的,但连接时仍然报“此系统的本地策略不允许您采用交互式登录”

6)以管理员启动管理工具->本地安全策略(secpol.msc)->本地策略->用户权利指派,“在本地登录”里去掉Guest、Everyone之类的用户和组,“通过终端服务允许登录”里添加everyone、Remote Desktop Users,“通过终端服务拒绝登录”去掉everyone

25、IL格式不正确

答:似乎是MaxToCode加壳之后的util.dll在内存中去壳有问题,产生的dll不完整,引起IL格式不正确。未加壳的OK,用reactor加壳的也OK。用MaxToCode的最少选项加壳,还是不行。顺便附上:

1)net reactor命令行加密的cmd: dotNET_Reactor.Console.exe -file client.dll -obfuscation 0 -targetfile d:encrypted //注意最后不能有,否则会报非法路径

2)vss操作命令行:签出:ss Checkout -C- -Yuser,pwd $/sln.root/sln/project/file.cs、撤销签出:ss Undocheckout -I-Y -Yuser,pwd $/sln.root/sln/project/file.cs、签入:ss Checkin -Calex每日发布 -Yuser,pwd $/sln.root/sln/project/file.cs、新增文件:ss Add -Calex新增文件 -Yuser,pwd project/file.cs

26、对消息GetUpdatePermissionRequest的正文进行序列化时出错,无法生成临时类(result=1) error CS2001 未能找到源文件c:windows empx84cjsvg.0.cs

答:给c:windows emp赋everyone权限即可。

27、只保留一个搜狗拼音中文输入法+Dx8.2.6设置Numeric掩码导致所有数字键敲击1次输入2次

答:数字键敲击1次输入2次,这个问题乍一看很怪,其实这类输入的问题,多半和输入法有些关系,之前也是搜狗拼音导致无法输入,这回是连输2次。测下来满足以下2个条件,会出现这一问题:

1)在任意Dx8.2.6的TextEdit里,设置了Numeric掩码

2)用户把所有输入法全删了,只保留搜狗拼音v6.2.0.7270。//之前那个导致DW下拉框出不来的是搜狗v4.3

一般来说,点击输入的控件时,输入法会自动关闭或切换到英文状态,但这个用户把所有输入法全删了,所以无法关闭也切不了英文,因此1次keyDown触发了2次keyPress(键盘的keyPress和输入法的keyPress)。解决办法:1》保留默认英文输入法;2》设置Control.ImeMode=Disable。关于微软输入法的框架,可以参考这篇博文

28、Adobe flash player安装出错,报“无法注册ActiveX控件”

答:1)问题很明确,就是regsvr32 c:windowssystem32MacromedFlashFlash32_14_0_0_125.ocx出错,0x80070005

2)略微尝试,发现原因也很明确,就是对HKCRCLSID{D27CDB6E-AE6D-11CF-96B8-444553540000}这一项没有修改权限。但恰恰就卡在这里很久,不论是以本地管理员、还是域管理员启动regedit,都无法删除+修改这一项。

3)反复尝试后发现,可如下获取修改权限:1》注销,以管理员身份登录,打开regedit->找到这一项右键->权限->高级->所有者->选择当前登录人->勾中“替换子容器及对象的所有者”->点应用。2》必须刷一遍所有子项。即右键->权限->高级->权限页->勾上“从父项继承...”+“替代所有子对象...”这2个checkbox,就应用。3》对clsid节点也做上述操作,OK!

4)后来在其他用户处也发现同样的问题,但用上述方法试图获取clsid权限时regedit总是闪退,查看事件管理器里的报错似乎指向一个叫ZFConnMonitor的进程,ModName:hookconnmonitor.dll,卸载这个程序,搞定!

29、通讯错误,iis服务端svc文件无法访问

答:1)问题本身不复杂,某个服务器上的IIS不可访问,http://localhost也无法访问。

2)重启网站、应用程序池、IIS都不行。防火墙没开,把端口改成8999之类的也不行。

3)注意到报错日志c:windowssystem32LogFilesW3SVC1两天前就已经停止记录了,同时c:windowssystem32LogFilesHTTPERR里有最新记录,打开一看,全是*_Connections_Refused之类的报错。

4)结合iis httperr connection_refused这几个关键字一查,果然找到博文1博文2,第一篇里提到的解决方案就够用了。原来是核心内存的非分页落到了20MB(这个默认值怎么这么小?!)以下,解决方法是1》HKLMsystemCurrentControlSetServicesHTTPParameters,新建dword:EnableAggressiveMemoryUsage=1;2》重启http服务net stop http /y,然后iisreset /restart即可。博文2更深入,似乎是说http.sys和其他核心驱动一样,共同使用核心内存,并提到一种方法可以找到是哪个驱动(c:windowssystem32driversxx.sys)占用过多内存,导致非分页落到20M以下。连招如下:安装win server 2003 sp2 32-bit support tools或从win server 2003 sp2.isosupport ools里解压得到->gflags.exe -k ptg,并重启->poolmon.exe -b->strings * |findstr Leak->sigcheck myfault.sys,找到对应的驱动后,在硬件管理器里卸载或禁用应该也OK的,但我没试了。

30、EntityFramework启用迁移并上线时,经常会报backing model has changed since database created, consider using code first migrations to update database

答:1)DatabaseInitializationStrategy_ModelMismatch:启用了迁移,但__MigrationHistory里最新的model和resx里的model不匹配时会报这个错。

2)DatabaseInitializationStrategy_MigrationsEnabledNoDrop:一旦启用了迁移(EF.dll里有MigrationConfiguration和DbMigraton,等价于启用迁移),就不能通过DropCreateDatabaseAlways来更新DB了。

3)DatabaseInitializationStrategy_MigrationsEnabled:一旦启用迁移,数据库必须存在,否则报这个错误。

关于EF的若干操作和异常,可以另开N篇博文了。

31、ePass3000安装后,ngSlotD服务无法启动,报错1053 服务没有及时响应启动或控制请求 或者 usb-key驱动安装不上,总是报“需要重启后完成卸载”

答:1)如何知道是否安装成功?1》确保Smart Card(SCardSvr)服务已启动,并且ngSlotD依赖于smart card服务;2》把ngslotd置为自动,并启动;3》如果启动出错,尝试删除服务并重建。

2)有的时候ePass卸载不干净,重装时总是报“需要重启后完成卸载”。可参照这篇《ePass3000常见问题解答》,经测试,关键是删除c:windows emp临时目录中的InstallReboot文件,再次安装就不会弹框了。重启机器,服务成功启动。

3)遗留问题:用户撤销签章时,会报“Access violation at address 06E117E7 in module ISCC72~1.ocx, write of address 0000180”的错误,并且导致IE挂掉,杀掉IE进程后再撤销OK,但下次签章再撤销时仍会报错。

4)服务常用命令:

sc start/delete ngSlotD

sc create/[config] ngSlotD binPath= "%ProgramFiles% gsrv gslotd.exe" start= auto depend= SCardSvr //obj= "NT AuthorityLocalService" //也可用默认的system账户,但注意参数= 后面一定要加一个空格,这是什么奇葩设定?!

ngSlotD -i(install service), -u(remove), -s(start), -t(stop), -v(display version), -h(display help)

epsng_certd -i(install monitor to auto-run list), -u(remove), -r(start), -a(hide mode, not show tray icon when run), -t(stop), -s(silent mode), -h(show usage)

32、通讯错误,服务器未提供有意义的回复;这可能是由协定不匹配、会话过早关闭或内部服务器错误引起的。

答:这是wcf服务参数或返回值中带有DataTable的典型错误,传入、传出的DataTable必须有名字,否则wcf序列化会报错。wcf配置里的启用消息日志记录+启用跟踪也可看到堆栈里清楚的报出这个问题。

33、xp开机时显示 BrStDvPt.exe无法定位程序输入点GetProcessImageFileNameA于动态链接库psapi.dll上

答:1)psapi.dll是windows下进程状态的帮助类(Process status helper),我机器上的版本是5.1.2600.5512。一般出现这个问题,是由于各种原因导致这个dll被修改了(比如被病毒修改替换、用户误删除等),所以找不到里面的函数入口。只要从其他正常的机器上把这个文件拷贝覆盖即可。

2)某些程序也依赖了这个文件,比如我机器上DameWare的目录里也有psapi.dll,版本是4.0.1371.1,打印机驱动的安装目录(比如c:program filesBrother Mfl-pro Suite)里也依赖了这个文件,用较新的版本覆盖即可。

34、EntityFrameworkSaveChange时报InvalidOperation异常

答:这个异常很常见,但引起的原因很多。这次的很隐蔽,A->B->C && A->C,这里Attach(A)的话,要保证C没有存在2次,去掉其中的一个,否则就会报重复KeyInObjectManager!

原文地址:https://www.cnblogs.com/AlexanderYao/p/4469340.html