【2008-10-24更新】關於此問題,已有新的研究心得

同事回報,忽然發現SSRS(SQL Server Reporting Service)透過網頁直接列印的功能失效了,一直彈出"無法載入用戶端列印控制項"的錯誤訊息。

試了設為信任網站、刪除Windows\Downloaded Program Files\RSClientPrint Class、重開機等招式都無效。開啟Process Monitor,有看到一大串Registry查詢,但看不出所以然,又懶得抓個正常版來做個馬拉松式比對,今天決定換個戰略進攻...

利用Fiddler抓到SSRS傳回以下HTML內容,就是前述錯誤訊息的由來。

<OBJECT ID="RSClientPrint" 
CLASSID="CLSID:FA91DF8D-53AB-455D-AB20-F2F023E498D3" 
CODEBASE="/Reports/Reserved.ReportViewerWebControl.axd?
ReportSession=yiyl2jjxy5g0j55ra0vsvba&amp; 
ControlID=dec65406970b41ea8b6cde2445d3e4ab&amp; 
Culture=1028&amp;UICulture=31748&amp; ReportStack=1&amp; 
OpType=PrintCab# Version=2005,090,3042,00" 
VIEWASTEXT></OBJECT>
        <script language="javascript">
        function Print()
        {
            if (typeof RSClientPrint.Print == "undefined")
            {
                alert("無法載入用戶端列印控制項。");
                return;
            }

在正常的情況下,當<OBJECT>指定的物件不存在時,應會透過CODEBASE位址自動下載安裝才對,但這台機器在手動刪除Windows\Downloaded Program Files\RSClientPrint Class後仍然未能重新安裝,而導致下方的Javascript檢查失敗。

我的推論是,可能這台機器殘存了某些設定,讓IE誤以為RSClientPrint元件是存在的,故未觸發自動安裝;但實際上元件又未完整註冊(檔案還被我們給砍了哩),搞得不上不下。

既然是ActiveX Control,就從Registry下手吧!

利用RegEdit尋找FA91DF8D-53AB-455D-AB20-F2F023E498D3,在HKCU\Software及HKLM\Software各找到一筆,先匯出備份後刪除:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{FA91DF8D-53AB-455D-AB20-F2F023E498D3}]
"Compatibility Flags"=dword:00000400

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\
{FA91DF8D-53AB-455D-AB20-F2F023E498D3}]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\
{FA91DF8D-53AB-455D-AB20-F2F023E498D3}\iexplore]
"Type"=dword:00000001
"Flags"=dword:00000000
"Count"=dword:00000025
"Time"=hex:d8,07,0a,00,01,00,0d,00,05,00,28,00,1c,00,02,00

將Registry刪除後,仍然無效。重開IE再試,就出現安裝控件的提示了。

問題排除,收工回家。

【2008-10-24更新】
發現刪除Registry只能暫時解決問題,依網友amoswu提供情資,此與KB956391 Hotfix有關,再Google了一下,網路有人找到解決方式了: http://www.dotnetgurus.net/post/2008/10/Reportviewer-Print-Problem-After-KB956391-(ActiveX-Kill-Bits-Update).aspx


Comments

# by woo

於10/16做完windows xp的自動更新後,就出現無法載入用戶端列印控制項的問題,正在束手無策時,看到您的blog,真的是感恩再感恩!!

# by Jeffrey

to woo, 我想起來了,依據同事的說法,這問題也是在10/15 Windows XP Update之後就發生,該不會真的跟Windows XP Update有關?

# by Grass

我們公司的電腦也是在10月中Update後發生此種情況,感謝這個專欄,我很努力的刪除我電腦regedit後也是可以了..不過實在是挺麻煩的..不知道下次的windows update會不會再做修正哪..

# by Michael Tsai

我昨天也進行了Window Server 2003的自動更新也發生了同樣的問題,但也是透過刪除我電腦regedit後就可以了,雖然挺麻煩的,感謝大師提供這個解決的方案

# by Michael Tsai

Windows Server 2003更新完也會發同樣的問題,一樣刪除我電腦regedit後也是可以了,感謝大師提供的解決方案

# by amoswu

感謝大師提供的訊息,我發現是KB956391:Windows XP 的 ActiveX Killbits 積存安全性更新這搞得鬼,雖然暫時用刪除我電腦regedit得方式,但是要每次重新開機後,都要做一次,挺煩的,有更好的解法嗎? 我找不到移除KB956391的方式

# by Jeffrey

to amoswu, 同事後來又反應過一次,說處理過的機器,隔天又發生同樣的狀況,我就猜想會不會問題並沒有解決? 現在看來移除Registry只是暫時的解法。 謝謝你鎖定出是哪個Upate的問題,利用你說的<STRONG>KB956391</STRONG>我Google到有人在MSDN論壇反應同樣的問題(http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=4006172&amp;SiteID=1),也有微軟的人參與討論,但除了解除安裝,似乎尚無解決方法的定論。我會抽空找個環境檢測一下看看。

# by Jeffrey

SSRS列印元件被Hotfix誤殺的問題,已找到修正方法一枚,大家可以試試: http://www.dotnetgurus.net/post/2008/10/Reportviewer-Print-Problem-After-KB956391-(ActiveX-Kill-Bits-Update).aspx

# by amoswu

報告大師,經過不斷的找資料,找到目前可以解的方式 我已經依此方式處理,目前重開機後,依然是可以列印的,不會再跳出"無法再入用戶端列印控制項"的訊息 以下資訊取至http://forums.microsoft.com/msdn/showpost.aspx?postid=4006172&siteid=1&sb=0&d=1&at=7&ft=11&tf=0&pageid=0 ================================================== 1 Install KB 954606 at sql server IF you have SQL Server 2005 SP2 9.3042 - 9.3072 2 Install KB 938464 at server IF you have sql server at OS window server 2003 SP2 (any Standard or enterprise Edition) 3 Install Report viewer Distributable 2005 SP1 at same server. You will find all this thing to download at below mentioned link http://www.microsoft.com/technet/security/Bulletin/MS08-052.mspx 4 Go to the services (Run services.msc) on same server and stop the IIS services 5 Just take care when you stop services there are three more service they will also stop with IIS. 6 Start IIS services and all attached services which stoped with IIS(HTTP SSL,WWW, IIS). Or you can reboot the server. You dont need to da anything on client machine.After this, may be some client find Error "Error Loading Resource Library (0X8007007E) when they client print icon, Then please register the RSClientprint.dll(RSClinetPrintclass 2005) By command prompt using command "regsvr32 RSClientprint.dll"

# by Jeffrey

to amoswu, 我後來搞清楚了,原來不是誤殺,是舊版RSClientPrint有漏洞所以被強制停用了。SSRS Server要裝GDR2,改用新版RSClientPrint,才能根本解決這個問題,細節說明可以看: http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/10/24/ssrs-print-issue-final.aspx

Post a comment