C/S端開發問題彙總

轉自:http://www.cnblogs.com/AlexanderYao/p/4469340.html

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\n176197\Local Settings\Apps\下的2.0文件夾刪除,重新打開桌面圖標即可。

2)或者打開Regedit,將HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment節點下的所有內容全部刪除,重新雙擊桌面的appref-ms圖標即可。

 

6、第三方控件相關問題:regsvr32註冊:DllRegisterServer失敗,返回代碼是0x80004005。或報檢索COM類工廠中CLSID爲{4764040E-4222-4DEC-9F2E-82D46E212B3A}的組件時失敗,原因是出現如下錯誤0x80040154。

答:1)由於域環境下,用戶沒有安裝權限、也沒有註冊com組件(常見的如水晶報表CrystalReport、PDF控件PDFSDK、FastReport等)的權限。所以新裝的機器很容易出現控件未註冊的問題。只需要以管理員權限註冊即可,如果權限不足,會報上述0x錯誤。

runas /user:domain\admin cmd

regsvr32 fastreport3.dll

cacls c:\client /t /g everyone:C

2)有時Guid指向的是wshom.ocx組件,可以把自己機器上的wshom.ocx拷貝到用戶機器上,用管理員運行 regsvr32 c:\windows\dwrcs\uploads\wshom.ocx,注意不加/i選項,OK!

 

7、Client更新出錯,彈出MessageBox說對系統Temp目錄無訪問權限。

答:在使用臨時目錄時,有時會出現獲取到的臨時目錄沒有權限。一般來說,調用Path.GetTempPath()方法應該返回用戶的臨時目錄,比如c:\Documents and Settings\user\Local Settings\Temp。但某些用戶切換過用戶目錄後,出現以wangyu1登錄,登錄成功後開始菜單裏顯示的是wangyuwy(估計是iNode裏設置的用戶名),但在c:\Documents and Settings\裏的目錄名卻是wy。由於Path.GetTempPath()裏調用的是Win32Native.GetTempPath,所以只能猜測這個方法想按照用戶名wangyu1去獲取臨時目錄,沒取到,於是取系統臨時目錄,但是又沒權限。

解決方法:1)備份用戶資料->註銷當前用戶(或者直接重啓,否則已經登錄過的用戶無法刪除)->以管理員身份登錄->系統屬性->高級->用戶配置文件->刪除錯誤的用戶->註銷->以正確的用戶名登錄->創建對應的文件夾->把備份的資料覆蓋回來。

2)簡單的方法是:給系統臨時目錄賦every讀寫權限,cacls c:\windows\temp /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->找到HKLM\system\CurrentControlSet\Services\Tcpip\Parameters,新增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: 將元數據寫入文件obj\debug\service.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:\windows\Fonts裏已經有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:\windows\assembly裏確認一下,確實沒有,也可以用gacutil確認。於是把好的機器上的c:\windows\assembly目錄打包,用管理員權限覆蓋上去,能更新了。//有點暴力

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。執行後在logs\setup.log裏報錯80041002,對象找不到(找不到類別、範例或屬性)。8004100E,命名空間找不到。再次嘗試,在管理員命令行裏,依次執行:net stop winmgmt->重命名c:\windows\system32\wbem\Repository爲Repo_bad之類的->net start winmgmt,這樣wmi會自行重建。

2)第二類異常數據錯誤,看起來是文件CRC校驗出錯,使用chkdsk C: /R在下次重啓時檢查文件,或在重啓後,使用安裝盤裏的磁盤檢測工具把整個磁盤修復一下就OK了。

3)第三類拒絕訪問,看起來是權限問題,對目錄c:\windows\system32\wbem添加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\temp\x84cjsvg.0.cs

答:給c:\windows\temp賦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:\windows\system32\Macromed\Flash\Flash32_14_0_0_125.ocx出錯,0x80070005

2)略微嘗試,發現原因也很明確,就是對HKCR\CLSID\{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:\windows\system32\LogFiles\W3SVC1兩天前就已經停止記錄了,同時c:\windows\system32\LogFiles\HTTPERR裏有最新記錄,打開一看,全是*_Connections_Refused之類的報錯。

4)結合iis httperr connection_refused這幾個關鍵字一查,果然找到博文1博文2,第一篇裏提到的解決方案就夠用了。原來是核心內存的非分頁落到了20MB(這個默認值怎麼這麼小?!)以下,解決方法是1》HKLM\system\CurrentControlSet\Services\HTTP\Parameters,新建dword:EnableAggressiveMemoryUsage=1;2》重啓http服務net stop http /y,然後iisreset /restart即可。博文2更深入,似乎是說http.sys和其他核心驅動一樣,共同使用核心內存,並提到一種方法可以找到是哪個驅動(c:\windows\system32\drivers\xx.sys)佔用過多內存,導致非分頁落到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,找到對應的驅動後,在硬件管理器裏卸載或禁用應該也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\temp臨時目錄中的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%\ngsrv\ngslotd.exe" start= auto depend= SCardSvr //obj= "NT Authority\LocalService" //也可用默認的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 files\Brother Mfl-pro Suite)裏也依賴了這個文件,用較新的版本覆蓋即可。

 

34、EntityFrameworkSaveChange時報InvalidOperation異常

答:這個異常很常見,但引起的原因很多。這次的很隱蔽,A->B->C && A->C,這裏Attach(A)的話,要保證C沒有存在2次,去掉其中的一個,否則就會報重複KeyInObjectManager!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章