【茶包射手日記】RegSvr32空包彈?

打算使用Visual Log Parser,過程一波三折。

下載了setup.exe,發現它以ClickOnce方式部署,程式一開啟時就死在疑似沒法建立副案名關聯的Exception上,完全無法使用,我猜跟未升成Admin權限執行有關,程式最後的更新是在2006年,可能當時尚未考量Vista的UAC機制。

TGIOS(Thank God It's Open Source),二話不說,當下決定Download Source回來自己Build,但又馬上卡在MSUtil COM+參照不存在的問題上。爬了文,發現它是顆佛心元件--LogParser.dll,理論上只要regsvr32 logparser.dll問題就能迎刃而解。

於是開了cmd,cd到LogParser.dll所在目錄,regsvr32 logparser.dll,系統彈出

DllRegisterServer in logparser.dll succeeded.

看似就要展開幸福快樂的日子,那知劇情急轉直下! Visual Studio在COM+ Reference清單中怎麼也找不到MS Utility 1.0 Type Library - LogParser Interface collection。

搞了一陣子,才想到剛剛沒有用Admin身份去跑cmd,而我的Windows 2008 R2有開啟UAC(這是一定要的),註冊元件相關Registry肯定要失敗,切成管理者身份執行的cmd再重新註冊,萬事OK!

所以問題來了,顯然非管理者CMD並未成功註冊logparser.dll,但為何又回報註冊成功? 立刻請茶包一哥出來面對驗證一下:

 

其中PID 5324用一般CMD執行,出現一堆ACCESS DENIED,這在預期內;而PID 6804是用管理者身份執行的CMD,寫入Registry動作一切如常。由此看來,問題出在regsvr32在未能寫入Registry時,還是粉飾太平地回報註冊完成,耽誤了我寶貴的青春。(更新: 其實是寫入User專屬的虛擬Registry中,因Visual Studio未使用同一身份執行,故看不到,此為Vista以後OS新增的特性)

進一步測試Windows 2008 R2 x64/Windows 7 x86,都發現regsvr32未啟用管理者權限,註冊失敗卻回報正常的狀態,故傾向判定此為regsvr32的Bug,但樣本數尚少,暫不下定論。有相關資料的朋友,歡迎回饋給我。

[更新2010-04-28]經小朱指點,這是Registry Virtualization的機制使然,regsvr32將資料寫到虛擬Registry區,之前只知其然,這次算有了深刻體驗!

歡迎推文分享:
Published 28 April 2010 10:43 AM 由 Jeffrey
Filed under: ,
Views: 12,127



意見

# 安東尼 said on 30 September, 2011 04:51 AM

我的LyfUPload.dll也不能在win2008/r2內run ~~可以幫忙嗎

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<April 2010>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication