C/S端开发问题汇总
0、先推薦幾款工具,連接遠(yuǎn)程客戶端DameWare Mini Remote Control,搜索本地文件Everything,以及sysinternals的系列工具:
FileMon-監(jiān)視所有文件修改、RegMon-監(jiān)視所有注冊表修改、ProcessExplorer-任務(wù)管理器、ProcessMonitor-監(jiān)視進(jìn)程對文件+注冊表的所有操作
SigCheck-識(shí)別文件頭+簽名+對應(yīng)的pbd、TcpView-監(jiān)視所有tcp連接、PsTools系列工具-操作所有本地+遠(yuǎn)程進(jìn)程
?
1、在一些基于Server 2008 R2的終端機(jī)上,經(jīng)常會(huì)出現(xiàn)多用戶進(jìn)程搶占同一文件(比如menuverison.ini)的問題,報(bào)IOException,對路徑的訪問被拒絕。
類似的,多個(gè)進(jìn)程寫同一個(gè)xml文件時(shí),會(huì)報(bào)“缺少根元素”或“根級(jí)別上的數(shù)據(jù)無效”,應(yīng)該也是類似的問題。
答:這類問題用lock{}是不夠的,lock(Monito)只能同步單進(jìn)程里多個(gè)線程對資源的訪問,這種跨進(jìn)程的同步要使用內(nèi)核鎖,比如基于事件的AutoResetEvent或基于信號(hào)量的Mutex。
?
2、未能加載文件或程序集xxx.client.dll或它的某一個(gè)依賴項(xiàng)。
答:這是客戶端更新程序下載dll不完整引起的,初步認(rèn)為是網(wǎng)絡(luò)層面的問題,導(dǎo)致文件接收不完整。不妨討論一下客戶端的更新策略:
1)用一個(gè)單獨(dú)的更新程序updator更新dll和resource文件,更新程序可以在系統(tǒng)啟動(dòng)前檢測、也可以以服務(wù)的形式在services.msc里運(yùn)行。
2)更新內(nèi)容打包成msi/exe/補(bǔ)丁包的形式,更新程序只負(fù)責(zé)檢測、下載、安裝更新包。
3)也可以做成安裝包后,由企業(yè)域推送、SCCM、VRV等工具推送到用戶機(jī)器上。
注:方法2保證了文件的完整性,但要求用戶有管理員的安裝權(quán)限,在企業(yè)環(huán)境里還不如用方法3。方法1需要用hash值等方法驗(yàn)證文件的完整性,不然就容易出現(xiàn)如上錯(cuò)誤。
?
3、用戶機(jī)器上大規(guī)模報(bào)出ora-12500、ora-12535、ora-12541等錯(cuò)誤。
答:DB服務(wù)器上%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無法啟動(dòng)進(jìn)程,db服務(wù)器是8核CPU、64G內(nèi)存,實(shí)際只用了32G。從oracle來看,用戶session數(shù)只有200,沒有達(dá)到最大值300。因此猜測是服務(wù)器的設(shè)置問題,搜索一下,據(jù)說可以把maxupro=nproc*90%,原本maxupro為256,改成3000,同時(shí)把ulimit->nofiles從2048改為4096,貌似問題得到了緩解,用戶session也順利超過200。
?
4、ftp服務(wù)器平時(shí)正常,某天突然擁堵,ftp server里看到大量客戶端排隊(duì),每個(gè)客戶端速度只有3K左右。不拋錯(cuò)不出異常,進(jìn)度條始終停在下載處。
答:一開始在DB服務(wù)器里輸入netstat -ano | findstr TIME_WAIT > netstat.log看到有大量的TIME_WAIT狀態(tài)。注意到client.config->customBinding->httpTransport->keepAliveEnabled=false,設(shè)置為true后是否能用client端的長連接代替多次的短連接。設(shè)置后,DB服務(wù)器里TIME_WAIT確實(shí)下去了,但ftp服務(wù)器還是會(huì)偶爾出現(xiàn)擁堵的情況。后來,考慮到這個(gè)情況是偶爾出現(xiàn)的,應(yīng)該與代碼無關(guān),由運(yùn)維室監(jiān)控網(wǎng)絡(luò)層面,發(fā)現(xiàn)這臺(tái)機(jī)器丟包很嚴(yán)重。監(jiān)測下來,ftp服務(wù)器有1G的帶寬,但直連的路由器只有百M(fèi)的速度,后來換路由后解決問題。
?
5、ClickOnce無法啟動(dòng)應(yīng)用程序,激活appref-ms異常。
答:猜測是由于ClickOnce更新到一半,網(wǎng)絡(luò)問題或是ClickOnce自己的Bug造成的程序文件損壞或與注冊表中的版本不一致。
解決方法:1)將c:\Documents and Settings\n176197\Local Settings\Apps\下的2.0文件夾刪除,重新打開桌面圖標(biāo)即可。
2)或者打開Regedit,將HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment節(jié)點(diǎn)下的所有內(nèi)容全部刪除,重新雙擊桌面的appref-ms圖標(biāo)即可。
?
6、第三方控件相關(guān)問題:regsvr32注冊:DllRegisterServer失敗,返回代碼是0x80004005。或報(bào)檢索COM類工廠中CLSID為{4764040E-4222-4DEC-9F2E-82D46E212B3A}的組件時(shí)失敗,原因是出現(xiàn)如下錯(cuò)誤0x80040154。
答:1)由于域環(huán)境下,用戶沒有安裝權(quán)限、也沒有注冊com組件(常見的如水晶報(bào)表CrystalReport、PDF控件PDFSDK、FastReport等)的權(quán)限。所以新裝的機(jī)器很容易出現(xiàn)控件未注冊的問題。只需要以管理員權(quán)限注冊即可,如果權(quán)限不足,會(huì)報(bào)上述0x錯(cuò)誤。
runas /user:domain\admin cmd
regsvr32 fastreport3.dll
cacls c:\client /t /g everyone:C
2)有時(shí)Guid指向的是wshom.ocx組件,可以把自己機(jī)器上的wshom.ocx拷貝到用戶機(jī)器上,用管理員運(yùn)行 regsvr32 c:\windows\dwrcs\uploads\wshom.ocx,注意不加/i選項(xiàng),OK!
?
7、Client更新出錯(cuò),彈出MessageBox說對系統(tǒng)Temp目錄無訪問權(quán)限。
答:在使用臨時(shí)目錄時(shí),有時(shí)會(huì)出現(xiàn)獲取到的臨時(shí)目錄沒有權(quán)限。一般來說,調(diào)用Path.GetTempPath()方法應(yīng)該返回用戶的臨時(shí)目錄,比如c:\Documents and Settings\user\Local Settings\Temp。但某些用戶切換過用戶目錄后,出現(xiàn)以wangyu1登錄,登錄成功后開始菜單里顯示的是wangyuwy(估計(jì)是iNode里設(shè)置的用戶名),但在c:\Documents and Settings\里的目錄名卻是wy。由于Path.GetTempPath()里調(diào)用的是Win32Native.GetTempPath,所以只能猜測這個(gè)方法想按照用戶名wangyu1去獲取臨時(shí)目錄,沒取到,于是取系統(tǒng)臨時(shí)目錄,但是又沒權(quán)限。
解決方法:1)備份用戶資料->注銷當(dāng)前用戶(或者直接重啟,否則已經(jīng)登錄過的用戶無法刪除)->以管理員身份登錄->系統(tǒng)屬性->高級(jí)->用戶配置文件->刪除錯(cuò)誤的用戶->注銷->以正確的用戶名登錄->創(chuàng)建對應(yīng)的文件夾->把備份的資料覆蓋回來。
2)簡單的方法是:給系統(tǒng)臨時(shí)目錄賦every讀寫權(quán)限,cacls c:\windows\temp /E /G everyone:C
3)也有可能是C盤空間不足,不妨cleanmgr /sagaset:99,清空所有回收站、壓縮舊文件。
?
8、TCP error code 10048通常每個(gè)套接字地址(協(xié)議網(wǎng)絡(luò)地址端口)只允許使用一次。
答:問題其實(shí)很明確,可以從以下幾個(gè)方面考慮:
1)是否所有client都指定同一個(gè)server端口;
2)client每次通信完成后是否有釋放端口資源;
3)是否服務(wù)端開啟的端口數(shù)太少,不夠用?
4)是否client要求的并發(fā)量太大?
這幾點(diǎn)會(huì)導(dǎo)致服務(wù)器端口被占滿,無空閑端口可用。我們client里都未指定特定端口,而且都用using{}包裹及時(shí)釋放。但client.config里keepAliveEnabled=true應(yīng)該改為false,否則會(huì)持續(xù)占用端口。然后也可以調(diào)整服務(wù)端的資源上限,修改服務(wù)器配置,提升端口上限、降低超時(shí)時(shí)間,如下:打開regedit->找到HKLM\system\CurrentControlSet\Services\Tcpip\Parameters,新增2項(xiàng)MaxUserPort=65534, TcpTimedWaitDelay=5,重啟服務(wù)器即可。
?
9、IIS里某個(gè)應(yīng)用程序池(比如: /LM/w3svc/3/root/Service)里的所有服務(wù)報(bào)OutOfMemoryException異常。
答:IIS在運(yùn)行過程中,每月都會(huì)出2-3次內(nèi)存不足的異常,在替換服務(wù)的dll后,也會(huì)出現(xiàn)這個(gè)異常。出錯(cuò)時(shí)能看到某個(gè)應(yīng)用程序池占用1.8G以上的內(nèi)存。可以手工強(qiáng)制回收對應(yīng)的程序池,也可以設(shè)置內(nèi)存超過1.5G時(shí)觸發(fā)回收。當(dāng)然,最重要的還是代碼里盡量在DB端過濾數(shù)據(jù),而不是取到內(nèi)存里再計(jì)算。
?
10、1)某個(gè)service.dll應(yīng)該有14M,但用vs2005生成出來只有372K,并且報(bào)生成成功。2)同一個(gè)文件,增長到16.5M時(shí),報(bào)fatal error cs0013: 將元數(shù)據(jù)寫入文件obj\debug\service.dll時(shí)發(fā)生錯(cuò)誤。
答:1)的情況下,改用msbuild可以正確生成。2)的情況下,msbuild和csc也報(bào)同樣的錯(cuò)誤。并且xp/win7/server 03、vs2005/vs2010下都穩(wěn)定報(bào)錯(cuò)。分析下來,應(yīng)該與項(xiàng)目里包含的字符串總長度有關(guān)系。因?yàn)槿サ羝渲心骋粌蓚€(gè)文件,生成能成功,甚至刪除其中一部分代碼或另一部分代碼,也能成功。寫了個(gè)測試項(xiàng)目試了下csproj里到底能包含多少字符串:
試下來,生成一個(gè)超大的test.cs文件,56個(gè)字符×130000時(shí)會(huì)報(bào)cs0013,14個(gè)字符×430000時(shí)也報(bào)cs0013。不過細(xì)節(jié)不同:fatal error cs0013: unexpected error writing metadata to file -- 沒有剩余的邏輯空間來創(chuàng)建更多用戶字符串。
雖然錯(cuò)誤不完全一致,但猜測是項(xiàng)目里包含了太多的字符/變量/資源等,超出了某個(gè)限制,結(jié)論是只能拆分項(xiàng)目。
?
11、DataWindow下拉框一閃即逝,搜狗拼音4.3與dw不兼容
答:滿足2個(gè)條件,會(huì)出現(xiàn)這一問題:1)用戶把所有輸入法全刪了,只保留搜狗拼音輸入法v4.3.0.3315正式版;2)點(diǎn)擊DataWindows下拉框。
一般來說,點(diǎn)擊不允許輸入的控件時(shí),輸入法會(huì)自動(dòng)關(guān)閉或切換到英文狀態(tài)。嘗試使用紫光拼音、微軟拼音都正常,Dx下拉框也正常,搜狗v6.0.0.5972也正常。因此認(rèn)定是搜狗v4.3的一個(gè)Bug。
?
12、遠(yuǎn)程服務(wù)器返回錯(cuò)誤(400)錯(cuò)誤的請求
分析:1)登錄Client時(shí)調(diào)用GetMacIpInfo后客戶端GetResponse時(shí)出錯(cuò)。
2)值得注意的是,直接用瀏覽器調(diào)用rest服務(wù)是OK的,而用代碼訪問會(huì)出錯(cuò)。
3)嘗試用Reflector8對比正確、錯(cuò)誤的dll,發(fā)現(xiàn)加密前的版本是正確的,加密后的版本出錯(cuò)。再進(jìn)一步對比發(fā)現(xiàn),正確的加密dll參數(shù)未被混淆,而錯(cuò)誤的加密dll參數(shù)如下:public DataTable GetMacIpInfo(string 001llll1010, string 0l1000ll1, string 011010ll)
4)最終在使用MaxtoCode加密服務(wù)dll時(shí),去掉參數(shù)混淆選項(xiàng)即可。
?
13、無法找到字體Arial //未解決
在System.Drawing.FontFamily.CreateFontFamily(string name, FontCollection fontCollection)
在System.Drawing.FontFamily..ctor(string name)
分析:1)用戶Client里的英文很小,中文顯示正常。
2)奇怪的是,用戶C:\windows\Fonts里已經(jīng)有Arial字體了,安裝對應(yīng)字體、復(fù)制到Fonts目錄后也無效。
3)在win7已安裝的字體,有些并未顯示,需要到Fonts里右鍵點(diǎn)擊顯示。xp里還需要對字體文件添加everyone讀取+讀取和運(yùn)行權(quán)限。
?
14、Dx導(dǎo)出PDF時(shí)中文顯示為亂碼。
答:1)Dx默認(rèn)字體是Tahoma,不支持中文,導(dǎo)出時(shí)可以改用Arial Unicode MS。
2)但有些機(jī)器沒有預(yù)裝Arial Unicode MS字體,打開導(dǎo)出的PDF時(shí)中文會(huì)顯示為“This font is not yet supported”。手工安裝即可。也可以使用一些更常見的字體,比如仿宋、楷體等。
3)當(dāng)然,也可以在導(dǎo)出的時(shí)候,判斷用戶機(jī)器上是否存在某個(gè)字體,并把該字體嵌進(jìn)去,保證在其他機(jī)器也能正常打開。
?
15、此IP Address(0.1.0.4)不能登錄系統(tǒng)。
答:安裝過攝像頭、或者TV卡的機(jī)器上,會(huì)出現(xiàn)一個(gè)0.1.0.4的虛擬IP,拔出設(shè)備或者注銷重啟之后就沒了。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的地址,或者針對內(nèi)部應(yīng)用,可以用正則表達(dá)式判斷IP的有效性。
?
16、對于某些大事務(wù)長時(shí)間運(yùn)行時(shí),會(huì)由于事務(wù)超時(shí)引發(fā)異常:無效操作,連接被關(guān)閉。
答:這個(gè)問題詳見:這篇隨筆
?
17、雙擊ClickOnce更新程序時(shí)報(bào)“無法安裝或運(yùn)行此應(yīng)用程序,該應(yīng)用程序要求首先在全局程序集緩存gac中安裝程序集system.identityModel 3.0.0.0”
答:ClickOnce的錯(cuò)誤可以先去事件管理器里看看,微軟的程序一般出錯(cuò)了都會(huì)在事件->應(yīng)用程序里留下出錯(cuò)信息。
1)對于這個(gè)錯(cuò)誤,報(bào)dll在gac里找不到,去c:\windows\assembly里確認(rèn)一下,確實(shí)沒有,也可以用gacutil確認(rèn)。于是把好的機(jī)器上的c:\windows\assembly目錄打包,用管理員權(quán)限覆蓋上去,能更新了。//有點(diǎn)暴力
2)但更新的過程中報(bào)錯(cuò):Faulting application client.exe, faulting module mscorwks.dll, version 2.0.50727.3620 | .net runtime verison?2.0.50727.3620 - 執(zhí)行引擎錯(cuò)誤,好的機(jī)器上mscorwks.dll的版本是2.0.50727.3634,用管理員權(quán)限替換即可。估計(jì)是xp sp3的補(bǔ)丁沒打上。
?
18、ClickOnce Your web browser settings do not allow you to run unsigned applications.
答:IE工具->Internet選項(xiàng)->高級(jí)->安全選項(xiàng)卡->勾上“允許運(yùn)行或安裝軟件,即使簽名無效”
IE工具->Internet選項(xiàng)->安全->點(diǎn)擊“可信站點(diǎn)”->點(diǎn)“站點(diǎn)”->去掉“對該區(qū)域中所有站點(diǎn)要求服務(wù)器驗(yàn)證(https)”->輸入ClickOnce所在站點(diǎn)->點(diǎn)擊添加
?
19、NetUtil.GetMacAddresses出錯(cuò),ManagementClass拋出ManagementException,3類異常分別是“找不到”、“數(shù)據(jù)錯(cuò)誤(循環(huán)冗余檢查)。(異常來自HRESULT: 0x80070017)”、“拒絕訪問。(異常來自HRESULT 0x80070005 E_ACCESSDENIED)”。
答:1)第一類異常not found,在StackOverflow上找到一個(gè)帖子,說wmi的repository運(yùn)行的過程中可能出錯(cuò),需要讓它自行重建。對于xp sp2的機(jī)器,輸入以下命令:rundll32 wbemupgd,UpgradeRepository。執(zhí)行后在logs\setup.log里報(bào)錯(cuò)80041002,對象找不到(找不到類別、范例或?qū)傩?#xff09;。8004100E,命名空間找不到。再次嘗試,在管理員命令行里,依次執(zhí)行:net stop winmgmt->重命名c:\windows\system32\wbem\Repository為Repo_bad之類的->net start winmgmt,這樣wmi會(huì)自行重建。
2)第二類異常數(shù)據(jù)錯(cuò)誤,看起來是文件CRC校驗(yàn)出錯(cuò),使用chkdsk C: /R在下次重啟時(shí)檢查文件,或在重啟后,使用安裝盤里的磁盤檢測工具把整個(gè)磁盤修復(fù)一下就OK了。
3)第三類拒絕訪問,看起來是權(quán)限問題,對目錄c:\windows\system32\wbem添加everyone的修改權(quán)限,重啟后OK。
4)另外還提到一套wmi diagnosis utility,看起來很強(qiáng)大,還沒試過。
?
20、client遇到問題需要關(guān)閉,我們對此引起的不便表示抱歉。
答:我們在Application.ThreadException和AppDomain.CurrentDomain.UnhandledException里抓了所有未處理的異常,但這個(gè)問題并沒有被抓住,可以認(rèn)為程序啟動(dòng)時(shí)加載依賴項(xiàng)就發(fā)生錯(cuò)誤了,但這是事后才想到的。
1)一開始遇到這個(gè)問題的第一反應(yīng),是去事件管理器里看有無線索。但事件管理器里只有faulting application client.exe, faulting module kernel32.dll, version 5.1.2600.5781, fault address 0x00012afb,事件ID=1000, 比較了一下用戶和我機(jī)器上的kernel32.dll、mscorlib.dll、mscorwks.dll這幾個(gè)經(jīng)典dll,替換了版本不同的,打開仍然出錯(cuò)。
2)后來走上了偏路,看到stackoverflow上一個(gè)帖子說可能資源被其他程序占用或泄漏了,覺得有點(diǎn)道理: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。于是查看任務(wù)管理器,發(fā)現(xiàn)我xp上38955個(gè)handles,win7上75211個(gè)handles, 但用戶機(jī)器上有259071個(gè)handles,把占用句柄最多的幾個(gè)程序NTRtScan、VRVEDP_M、某個(gè)svchost,趨勢殺毒等殺掉之后,仍然報(bào)相同的錯(cuò)誤。后來我想到,如果是資源不夠用,那多開幾個(gè)word+excel+ps+foxit pdf+video,如果沒問題,應(yīng)該能去除這個(gè)可能性。
3)然后終于走上了正路,用sysinternals的ProcessExplorer生成client.exe的full dump文件,安裝win7的symbols之后加載dump并分析,能得到比較詳細(xì)的堆棧信息,能看到是在mscorwks獲取元數(shù)據(jù)時(shí)出錯(cuò)然后調(diào)用kernel32拋異常的。
kernel32!RaiseException+0x52
mscorwks!GetMetaDataInternalInterface+0x84a9
mscorwks!CopyPDBs+0x39f8
mscorwks!LogHelp_LogAssert+0x5448
這里其實(shí)已經(jīng)指向了真正的問題所在,是加載dll的元數(shù)據(jù)時(shí)出錯(cuò),但是沒指出真正出錯(cuò)的dll。
4)最后重啟用管理員登錄,再dump出一個(gè)full.dmp,這次用windbg一分析(analyze -v),居然一目了然的指出“未能加載common.dll",一看用戶機(jī)器上出錯(cuò)的dll只有260K,正常應(yīng)該有3.25M,直接更新這個(gè)文件即可。奇怪的是里面明明是個(gè)net的異常System.BadImageFormatException,為什么沒有以.net的異常拋出呢?呵呵
5)教訓(xùn)是1》這次又是由于dll更新不完整造成的,只是更加隱藏,更新文件的時(shí)候不加CRC或hash驗(yàn)證真不行啊。2》似乎用域用戶權(quán)限dump出的信息不全,還是要用管理員權(quán)限生成full dump。3》windbg確實(shí)比較牛,還是要認(rèn)真學(xué)一學(xué)。
?
21、未能加載文件或程序集DataWindowInterop, Version=2.0.6662.0或它的某一個(gè)依賴項(xiàng),試圖加載格式不正確的程序
答:乍一看是個(gè)類似的問題,但更新這個(gè)dll仍然出錯(cuò),猜測是環(huán)境和os的問題,換一臺(tái)win2003的機(jī)器是OK的。后來注意到用戶的系統(tǒng)是win7 x64位的,我們的client.exe依賴了DataWindowsInterop.dll。用Reflector打開client和dwi,都是any cpu的。右鍵->屬性->兼容性->用xp sp3兼容模式運(yùn)行client.exe,還是報(bào)同樣的錯(cuò)誤。再把client用x86生成,再跑就OK了。這似乎說明client是以x64運(yùn)行的,并且希望找到dwi的x64位版本,而標(biāo)識(shí)為any cpu的DataWindowsInterop其實(shí)是x86的,并不支持x64,所以格式并不正確。解決:要么為用戶生成一個(gè)dwi64位的版本,要么換一個(gè)32位的環(huán)境。
?
22、無效操作,連接被關(guān)閉。檢測到ContextSwitchDeadlock,Message:CLR無法從COM上下文0x1ad008轉(zhuǎn)換到COM上下文0x1ad178,這種狀態(tài)已持續(xù)60秒。擁有目標(biāo)上下文/單元的線程很有可能執(zhí)行的是非泵式等待或者在不發(fā)送windows消息的情況下處理一個(gè)運(yùn)行時(shí)間非常長的操作。這種情況通常會(huì)影響到性能,甚至可能導(dǎo)致應(yīng)用程序不響應(yīng)或者使用的內(nèi)存隨時(shí)間不斷累積。要避免此問題,所有單線程單元(STA)線程都應(yīng)使用泵式等待基元(如CoWaitForMultipleHandles),并在運(yùn)行時(shí)間很長的操作過程中定期發(fā)送消息。
答:這個(gè)錯(cuò)誤本身是單線程單元執(zhí)行時(shí)間過長導(dǎo)致的,怎么解決方向不明確。后來跟蹤調(diào)試的時(shí)候發(fā)現(xiàn)有一段sql查詢很慢,涉及到一個(gè)1300萬數(shù)據(jù)量的表。查詢的時(shí)候,使用了一個(gè)手工添加的索引,去掉之后,查詢使用主、外鍵索引,速度快了之后也就沒報(bào)這個(gè)問題了。
?
23、多用戶終端服務(wù)器上較容易出現(xiàn)磁盤空間不足造成client無法更新。
答:1)以本地管理員的權(quán)限r(nóng)d /s c:\$Recycle.Bin,因?yàn)楹芏嗄昙o(jì)大的用戶只會(huì)del,不會(huì)shift+del
2)在磁盤清理里,添加計(jì)劃任務(wù):每周六早上1點(diǎn)做c盤清理
3)考慮在gpedit.msc中禁用回收站,避免C盤空間的積累
?
24、本機(jī)無法連接遠(yuǎn)程桌面+此系統(tǒng)的本地策略不允許您采用交互式登錄
答:1)查看本機(jī),發(fā)現(xiàn)系統(tǒng)屬性->遠(yuǎn)程->遠(yuǎn)程桌面是關(guān)閉的
2)注銷換管理員賬號(hào)進(jìn)去,發(fā)現(xiàn)這個(gè)選項(xiàng)是灰的。在services.msc里啟動(dòng)NetMeeting Remote Desktop Sharing服務(wù),總也無法啟動(dòng)
3)打開gpedit.msc,計(jì)算機(jī)配置->管理模板->windows組件,發(fā)現(xiàn)沒有“終端服務(wù)”這一項(xiàng)。
4)右鍵管理模板->添加/刪除模板->添加,把所有.adm文件都添加進(jìn)去,就能看到“終端服務(wù)->允許用戶使用終端服務(wù)遠(yuǎn)程連接“,選擇已啟用即可。
5)這時(shí)遠(yuǎn)程桌面是打開的,但連接時(shí)仍然報(bào)“此系統(tǒng)的本地策略不允許您采用交互式登錄”
6)以管理員啟動(dòng)管理工具->本地安全策略(secpol.msc)->本地策略->用戶權(quán)利指派,“在本地登錄”里去掉Guest、Everyone之類的用戶和組,“通過終端服務(wù)允許登錄”里添加everyone、Remote Desktop Users,“通過終端服務(wù)拒絕登錄”去掉everyone
?
25、IL格式不正確
答:似乎是MaxToCode加殼之后的util.dll在內(nèi)存中去殼有問題,產(chǎn)生的dll不完整,引起IL格式不正確。未加殼的OK,用reactor加殼的也OK。用MaxToCode的最少選項(xiàng)加殼,還是不行。順便附上:
1)net reactor命令行加密的cmd: dotNET_Reactor.Console.exe -file client.dll -obfuscation 0 -targetfile d:\encrypted //注意最后不能有\(zhòng),否則會(huì)報(bào)非法路徑
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每日發(fā)布 -Yuser,pwd $/sln.root/sln/project/file.cs、新增文件:ss Add -Calex新增文件 -Yuser,pwd project/file.cs
?
26、對消息GetUpdatePermissionRequest的正文進(jìn)行序列化時(shí)出錯(cuò),無法生成臨時(shí)類(result=1) error CS2001 未能找到源文件c:\windows\temp\x84cjsvg.0.cs
答:給c:\windows\temp賦everyone權(quán)限即可。
?
27、只保留一個(gè)搜狗拼音中文輸入法+Dx8.2.6設(shè)置Numeric掩碼導(dǎo)致所有數(shù)字鍵敲擊1次輸入2次
答:數(shù)字鍵敲擊1次輸入2次,這個(gè)問題乍一看很怪,其實(shí)這類輸入的問題,多半和輸入法有些關(guān)系,之前也是搜狗拼音導(dǎo)致無法輸入,這回是連輸2次。測下來滿足以下2個(gè)條件,會(huì)出現(xiàn)這一問題:
1)在任意Dx8.2.6的TextEdit里,設(shè)置了Numeric掩碼
2)用戶把所有輸入法全刪了,只保留搜狗拼音v6.2.0.7270。//之前那個(gè)導(dǎo)致DW下拉框出不來的是搜狗v4.3
一般來說,點(diǎn)擊輸入的控件時(shí),輸入法會(huì)自動(dòng)關(guān)閉或切換到英文狀態(tài),但這個(gè)用戶把所有輸入法全刪了,所以無法關(guān)閉也切不了英文,因此1次keyDown觸發(fā)了2次keyPress(鍵盤的keyPress和輸入法的keyPress)。解決辦法:1》保留默認(rèn)英文輸入法;2》設(shè)置Control.ImeMode=Disable。關(guān)于微軟輸入法的框架,可以參考這篇博文。
?
28、Adobe flash player安裝出錯(cuò),報(bào)“無法注冊ActiveX控件”
答:1)問題很明確,就是regsvr32 c:\windows\system32\Macromed\Flash\Flash32_14_0_0_125.ocx出錯(cuò),0x80070005
2)略微嘗試,發(fā)現(xiàn)原因也很明確,就是對HKCR\CLSID\{D27CDB6E-AE6D-11CF-96B8-444553540000}這一項(xiàng)沒有修改權(quán)限。但恰恰就卡在這里很久,不論是以本地管理員、還是域管理員啟動(dòng)regedit,都無法刪除+修改這一項(xiàng)。
3)反復(fù)嘗試后發(fā)現(xiàn),可如下獲取修改權(quán)限:1》注銷,以管理員身份登錄,打開regedit->找到這一項(xiàng)右鍵->權(quán)限->高級(jí)->所有者->選擇當(dāng)前登錄人->勾中“替換子容器及對象的所有者”->點(diǎn)應(yīng)用。2》必須刷一遍所有子項(xiàng)。即右鍵->權(quán)限->高級(jí)->權(quán)限頁->勾上“從父項(xiàng)繼承...”+“替代所有子對象...”這2個(gè)checkbox,就應(yīng)用。3》對clsid節(jié)點(diǎn)也做上述操作,OK!
4)后來在其他用戶處也發(fā)現(xiàn)同樣的問題,但用上述方法試圖獲取clsid權(quán)限時(shí)regedit總是閃退,查看事件管理器里的報(bào)錯(cuò)似乎指向一個(gè)叫ZFConnMonitor的進(jìn)程,ModName:hookconnmonitor.dll,卸載這個(gè)程序,搞定!
?
29、通訊錯(cuò)誤,iis服務(wù)端svc文件無法訪問
答:1)問題本身不復(fù)雜,某個(gè)服務(wù)器上的IIS不可訪問,http://localhost也無法訪問。
2)重啟網(wǎng)站、應(yīng)用程序池、IIS都不行。防火墻沒開,把端口改成8999之類的也不行。
3)注意到報(bào)錯(cuò)日志c:\windows\system32\LogFiles\W3SVC1兩天前就已經(jīng)停止記錄了,同時(shí)c:\windows\system32\LogFiles\HTTPERR里有最新記錄,打開一看,全是*_Connections_Refused之類的報(bào)錯(cuò)。
4)結(jié)合iis httperr connection_refused這幾個(gè)關(guān)鍵字一查,果然找到博文1和博文2,第一篇里提到的解決方案就夠用了。原來是核心內(nèi)存的非分頁落到了20MB(這個(gè)默認(rèn)值怎么這么小?!)以下,解決方法是1》HKLM\system\CurrentControlSet\Services\HTTP\Parameters,新建dword:EnableAggressiveMemoryUsage=1;2》重啟http服務(wù)net stop http /y,然后iisreset /restart即可。博文2更深入,似乎是說http.sys和其他核心驅(qū)動(dòng)一樣,共同使用核心內(nèi)存,并提到一種方法可以找到是哪個(gè)驅(qū)動(dòng)(c:\windows\system32\drivers\xx.sys)占用過多內(nèi)存,導(dǎo)致非分頁落到20M以下。連招如下:安裝win server 2003 sp2 32-bit support tools或從win server 2003 sp2.iso\support\tools\里解壓得到->gflags.exe -k ptg,并重啟->poolmon.exe -b->strings * |findstr Leak->sigcheck myfault.sys,找到對應(yīng)的驅(qū)動(dòng)后,在硬件管理器里卸載或禁用應(yīng)該也OK的,但我沒試了。
?
30、EntityFramework啟用遷移并上線時(shí),經(jīng)常會(huì)報(bào)backing model has changed since database created, consider using code first migrations to update database
答:1)DatabaseInitializationStrategy_ModelMismatch:啟用了遷移,但__MigrationHistory里最新的model和resx里的model不匹配時(shí)會(huì)報(bào)這個(gè)錯(cuò)。
2)DatabaseInitializationStrategy_MigrationsEnabledNoDrop:一旦啟用了遷移(EF.dll里有MigrationConfiguration和DbMigraton,等價(jià)于啟用遷移),就不能通過DropCreateDatabaseAlways來更新DB了。
3)DatabaseInitializationStrategy_MigrationsEnabled:一旦啟用遷移,數(shù)據(jù)庫必須存在,否則報(bào)這個(gè)錯(cuò)誤。
關(guān)于EF的若干操作和異常,可以另開N篇博文了。
?
31、ePass3000安裝后,ngSlotD服務(wù)無法啟動(dòng),報(bào)錯(cuò)1053 服務(wù)沒有及時(shí)響應(yīng)啟動(dòng)或控制請求 或者 usb-key驅(qū)動(dòng)安裝不上,總是報(bào)“需要重啟后完成卸載”
答:1)如何知道是否安裝成功?1》確保Smart Card(SCardSvr)服務(wù)已啟動(dòng),并且ngSlotD依賴于smart card服務(wù);2》把ngslotd置為自動(dòng),并啟動(dòng);3》如果啟動(dòng)出錯(cuò),嘗試刪除服務(wù)并重建。
2)有的時(shí)候ePass卸載不干凈,重裝時(shí)總是報(bào)“需要重啟后完成卸載”。可參照這篇《ePass3000常見問題解答》,經(jīng)測試,關(guān)鍵是刪除c:\windows\temp臨時(shí)目錄中的InstallReboot文件,再次安裝就不會(huì)彈框了。重啟機(jī)器,服務(wù)成功啟動(dòng)。
3)遺留問題:用戶撤銷簽章時(shí),會(huì)報(bào)“Access violation at address 06E117E7 in module ISCC72~1.ocx, write of address 0000180”的錯(cuò)誤,并且導(dǎo)致IE掛掉,殺掉IE進(jìn)程后再撤銷OK,但下次簽章再撤銷時(shí)仍會(huì)報(bào)錯(cuò)。
4)服務(wù)常用命令:
sc start/delete ngSlotD
sc create/[config] ngSlotD binPath= "%ProgramFiles%\ngsrv\ngslotd.exe" start= auto depend= SCardSvr //obj= "NT Authority\LocalService" //也可用默認(rèn)的system賬戶,但注意參數(shù)= 后面一定要加一個(gè)空格,這是什么奇葩設(shè)定?!
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、通訊錯(cuò)誤,服務(wù)器未提供有意義的回復(fù);這可能是由協(xié)定不匹配、會(huì)話過早關(guān)閉或內(nèi)部服務(wù)器錯(cuò)誤引起的。
答:這是wcf服務(wù)參數(shù)或返回值中帶有DataTable的典型錯(cuò)誤,傳入、傳出的DataTable必須有名字,否則wcf序列化會(huì)報(bào)錯(cuò)。wcf配置里的啟用消息日志記錄+啟用跟蹤也可看到堆棧里清楚的報(bào)出這個(gè)問題。
?
33、xp開機(jī)時(shí)顯示 BrStDvPt.exe無法定位程序輸入點(diǎn)GetProcessImageFileNameA于動(dòng)態(tài)鏈接庫psapi.dll上
答:1)psapi.dll是windows下進(jìn)程狀態(tài)的幫助類(Process status helper),我機(jī)器上的版本是5.1.2600.5512。一般出現(xiàn)這個(gè)問題,是由于各種原因?qū)е逻@個(gè)dll被修改了(比如被病毒修改替換、用戶誤刪除等),所以找不到里面的函數(shù)入口。只要從其他正常的機(jī)器上把這個(gè)文件拷貝覆蓋即可。
2)某些程序也依賴了這個(gè)文件,比如我機(jī)器上DameWare的目錄里也有psapi.dll,版本是4.0.1371.1,打印機(jī)驅(qū)動(dòng)的安裝目錄(比如c:\program files\Brother Mfl-pro Suite)里也依賴了這個(gè)文件,用較新的版本覆蓋即可。
?
34、EntityFrameworkSaveChange時(shí)報(bào)InvalidOperation異常
答:這個(gè)異常很常見,但引起的原因很多。這次的很隱蔽,A->B->C && A->C,這里Attach(A)的話,要保證C沒有存在2次,去掉其中的一個(gè),否則就會(huì)報(bào)重復(fù)KeyInObjectManager!
轉(zhuǎn)載于:https://www.cnblogs.com/AlexanderYao/p/4469340.html
總結(jié)
以上是生活随笔為你收集整理的C/S端开发问题汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript变量作用域和内存问题
- 下一篇: Selenium2Library关键字(