最近發現用vs處理xml檔案還挺方便的哦,關鍵是快速鍵已經用的很熟,除了沒有相同字串高亮這個notepad++特有的功能外,其他都已經很完善了,語法檢查不錯,所以,在工具裡就想用vs作為預設xml文字編輯器。
研究了很久的登錄機碼,才發現判斷vs是否安裝並不是那麼容易,起碼並不是那麼簡單的。
1.vs的註冊項在HKEY_CURRENT_USER/SOFTWARE/MICROSOFT/VISUALSTUDIO/ 下,如果同時安裝了vs8,vs9,那麼該項下降有兩個項:8.0 , 9.0;
注意:不要從HKEY_LOCAL_MACHINE中找,你會發現一大堆版本,vs3—vs9都有。
2.vs的安裝位置,這個也不是那麼的靠譜,只能找到一個最後寫入註冊表的位置。在安裝vs的時候會註冊一個
HKEY_LOCAL_MACHILE/SOFTWARE/MICROSOFT/CURRENTVERSION/APP PATHS/DEVENV.EXE,預設值就是vs的安裝位置,但是如果你先安裝了vs8,在安裝了vs9,那麼該項就被改寫成vs9的安裝目錄了。
3.也許你會說平常開啟vs solution沒問題啊,windows找到合適的vs開啟的,其實,還有一個東西,就是在c:/program files/common files/microsoft shared/msenv/vslauncher.exe,這個學名叫visual studio version selector,專門用來擷取正確的vs的版本。它應該維護了visual studio的版本及位置資訊,但是遺憾的是,vslauncher並沒有把相關資訊儲存在註冊表裡--這可真是頭疼啊....
...
以上的思路貌似沒什麼錯,但是其實是錯了,各位看官發現了嗎...
從一開始我就錯了,導致後面的推理越來越複雜。第一步當我在看到HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/VISUALSTUDIO/中那麼多的版本時,我就片面的認為這個項裡的資訊並不實用,所以都沒有檢驗就直接忽略了,但其實在那裡面確實存在著關鍵的資訊。雖然那裡面確實存在著諸多的版本,但是沒有安裝的並沒有什麼值,而在已經安裝的項下,會看到InstallDir--也就是該版本的安裝目錄,這樣,就ok了。
操縱註冊表,自己一個個寫註冊表函數是要死人的,我曾多次寫過,但是多次忘記,那些函數的設計實在是很不人性化啊。但是不要緊,我們有bcg,使用其中的CBCGPRegistry類,能夠輕鬆操作註冊表,當然像codeproject上也有很多免費的類庫,總之,千萬別自己寫,真要寫就寫個全面的,也發布到網上去,以後可以複用的,否則就沒意思了,因為你不久就會忘記的:~(
CString pathName;<br />CBCGPRegistry reg(true, false); //true 很關鍵,指定實在HKEY_LOCAL_MACHINE下<br />reg.Open("SOFTWARE/Microsoft//VisualStudio//9.0//Setup//VS//"<br />reg.Read("EnvironmentPath", pathName);
總結一下:1.先從HKEY_CURRENT_USER下擷取使用者確實安裝的版本數,比如有8.0,9.0兩個版本,然後讓使用者選擇一個作為預設版本,接著從HKEY_LOCAL_MACHINE裡找到對應的版本號碼並擷取其地址,然後將其寫入工具的註冊表裡。