Can't kill msnmsgr.exe process on Windows 7 64bits

最近遇到一個狀況,關機時無法正常登出,分析了一陣子後發現 msnmsgr.exe (MSN Messenger) 程序會卡死在那邊導致無法順利登出,用 Process Explorer kill 該 process 卻殺不死!? 狀態會停在 Wait:Executive,後來用這個關鍵字找一下找到這篇討論,其中這段文字引起我的注意:"I'm thinking offending IRQ & driver?"

在這個狀況發生前,電腦較為明顯的事件是裝上了一台條碼掃描器,於是把那台條碼掃描器給拔掉,死不了的 msnmsgr.exe process 就消失了!

經過了好幾天的不正常關機後,終於找到問題癥結所在,真是大快人心,不過這問題的確實成因還真是個謎...

分類: 射茶包 | 在〈Can't kill msnmsgr.exe process on Windows 7 64bits〉中留言功能已關閉

PHP 5.3 + FastCGI for IIS6 安裝及設定

  1. 下載 FastCGI for IIS6
  2. 下載 PHP (ZIP, Non Thread Safe 即可)
  3. 停止 IIS 服務
  4. 安裝 FastCGI for IIS6
  5. 解壓縮 PHP 到 D:\PHP_5.3
  6. 到 D:\PHP_5.3,複製 php.ini-development 或 php.ini-production 成為 php.ini
  7. 調整 php.ini 設定:
    PHP 主要設定:

    extension_dir = "ext"
    date.timezone = "Asia/Taipei"

    PHP 次要設定:

    max_execution_time = 30 ; 視需要改多一點
    memory_limit = 128M ; 視需要改多一點

    FastCGI 相關設定:

    fastcgi.impersonate = 1
    fastcgi.logging = 0
    cgi.fix_pathinfo = 1
    cgi.force_redirect = 0

    Extension 設定: (視情況)

    extension=php_curl.dll
    extension=php_gd2.dll
    extension=php_gettext.dll
    extension=php_mbstring.dll
    extension=php_pdo_mysql.dll
    extension=php_pdo_sqlite.dll
    extension=php_pdo_sqlsrv_53_nts_vc9.dll
    zend_extension="D:\PHP_5.3\ext\ioncube_loader_win_5.3.dll"
  8. 調整 fcgiext.ini 設定:(C:\WINDOWS\system32\inetsrv\fcgiext.ini)
    [Types]
    php=PHP
    
    [PHP]
    ExePath=D:\PHP_5.3\php-cgi.exe
    InstanceMaxRequests=10000
    ActivityTimeout=70 ;與 PHP.ini 裡的 max_execution_time 一致
    RequestTimeout=90 ;與 PHP.ini 裡的 max_execution_time 一致
  9. 增加系統環境變數:系統 PATH 路徑 (cmd 執行 php.exe 用)
    D:\PHP_5.3\
  10. 啟動 IIS 服務
  11. 調整 IIS 設定:
    網站/內容/主目錄/設定/對應/應用程式副檔名/新增

    執行檔: C:\WINDOWS\system32\inetsrv\fcgiext.dll
    副檔名: .php
    指令動詞/限制為: 所有的指令動詞
    指令碼引擎: checked
    確認該檔案是否存在: checked

    網站/內容/文件/啟用預設內容頁/新增

    index.php
  12. 檢查:
    IIS 網頁服務延伸 : FastCGI Handler 已允許
    PHP: CMD > php -v
    WEB: <?php phpinfo(); ?>

References:

分類: Web technology | 標籤: , | 在〈PHP 5.3 + FastCGI for IIS6 安裝及設定〉中留言功能已關閉

php://output open_basedir error

如果使用 php://output 作為輸出時遇到以下錯誤:

open_basedir restriction in effect. File(php://output) is not within the allowed path(s)

將系統暫存目錄 (參閱系統變數) 納入 open_basedir 設定中即可,不是將 php://output 放入喔...

2012/12/27 Update :
如果路徑是 C:\Windows\TEMP,請記得給 IIS_IUSRS 對應的權限(但會衍生安全性風險),也可考慮更改系統變數 TEMP, TMP 去別的位置。

分類: Web technology | 標籤: | 在〈php://output open_basedir error〉中留言功能已關閉

TeamViewer Meeting Add-In cause Outlook 2007 cannot send mail

TeamViewer 8 隨附安裝的 "TeamViewer Meeting Add-In" 會造成 Outlook 2007 無法正常發信,症狀如下:

  • 當按下傳送後去寄件匣檢查該信件會發現寄件日期變成,也就是呈現被再次打開讀取過但未按下寄出的狀態,這時再怎麼按傳送都沒用,寄件日期出現不到一秒馬上就消失。

解決方法:

  1. 去 工具/信任中心/增益集/管理/COM 增益集 把 TeamViewer Meeting Add-In 給停用
  2. 關閉 Outlook 後重新開啟 Outlook
分類: 射茶包 | 在〈TeamViewer Meeting Add-In cause Outlook 2007 cannot send mail〉中留言功能已關閉

ADODB nested recordset TCP 1433 TIME_WAIT flood issue

今天在 troubleshooting 客戶主機上問題的時候,不經意從 Tcpview 發現某個系統在使用者使用的時候會對 SQL Server 產生大量 TIME_WAIT session,這對於自我要求的系統開發者來說,是個不能視而不見的瑕疵,於是開始進行 debug...

經過兩個小時分析後,發現了一個狀況(先看以下程式碼):

'// 預設 Conn 已經建立

'// 第一個 adCmdStoreProc
Dim rs1 : Set rs1 = Server.CreateObject("ADODB.Recordset")
Dim cmd1 : Set cmd1 = Server.CreateObject("ADODB.Command")

cmd1.ActiveConnection = Conn
cmd1.CommandText = "usp_SPNAME1"
cmd1.CommandType = adCmdStoredProc
cmd1.Parameters.Refresh

cmd1.Parameters("@Param1").Value = 1

Set rs1 = cmd1.Execute

'// 第二個 adCmdStoreProc
Dim rs2 : Set rs2 = Server.CreateObject("ADODB.Recordset")
Dim cmd2 : Set cmd2 = Server.CreateObject("ADODB.Command")

cmd2.ActiveConnection = Conn
cmd2.CommandText = "usp_SPNAME2"
cmd2.CommandType = adCmdStoredProc
cmd2.Parameters.Refresh

cmd2.Parameters("@Param2").Value = 2

Do While NOT rs1.EOF

	cmd2.Execute

	rs1.MoveNext
Loop

這是一個 loop 但是為巢狀查詢,依據 rs1 取得的 recordset 執行 cmd2 的查詢,以上程式碼看起來沒有問題,執行起來也不會發生錯誤,但是會產生等同於 recordset count 數量的 TCP TIME_WAIT session,關鍵在於 Conn (Connection) 被拿來用了兩次 (cmd1.ActiveConnection & cmd2.ActiveConnection),即便在第二次設定給 cmd2前 Set cmd1 = Nothing 也沒用,一樣會造成 cmd2 在作動時產生 TIME_WAIT  。 (CommandType = adCmdStoredProc 時在設定Parameters 值的時候就會產生 TIME_WAIT,CommandType = adCmdText 時在 Execute 時會產生 TIME_WAIT)

而這個 issue 的解決辦法是:

每個 ActiveConnection 都給他一個獨立的 Connection object

延伸閱讀:

Nested RecordSet and the port/socket in TIME_WAIT problem by example.

分類: Web technology | 標籤: | 在〈ADODB nested recordset TCP 1433 TIME_WAIT flood issue〉中留言功能已關閉