2010年6月14日 星期一

NSIS - 新增程式連結到控制台

寫法可以參考:

主要寫在Registry的地方有兩個地方:
(1)HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\${GUID}
(2)HKCR\CLSID\${GUID}

產生GUID的方法可以參考:

移除的方法,如果使用NSIS的方法,則如下:
(1)DeleteRegKey HKCR "CLSID\${GUID}"
(2)DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\${GUID}"

如果用程式移除,在32bit OS的位置相同,在64bit OS的位置則如下:
(1)HKCR\Wow6432Node\CLSID\GUID
(2)HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\GUID

2010年6月2日 星期三

CMMI-建構管理

流程領域:支援類
目的:
使用建構識別、建構控制、建構狀態紀錄及建構稽核,來達到建立與維護工作產品之完整性。
包含的活動:
(1)界定所選定之工作產品的建構,這些工作產品在特定的時間點會組成基準。
(2)管制建構項目的變更。
(3)建立或提供規格,以便從建構管理系統建造工作產品。
(4)維護基準的完整性。
(5)提供正確的狀態和目前的建構資料給發展人員、最終使用者及客戶。

特定目標與實務如下:
SG1建立工作產品基準
SP1.1 界定建構項目、元件、相關工作產品
SP1.2 建立建構管理系統、變更管理系統
SP1.3 建立或發行基準
SG2追蹤並管制變更
SP2.1 追蹤變更申請
SP2.2 管制建構項目、控制變更狀況
SG3建立基準完整性
SP3.1 建立建構管理紀錄
SP3.2 實施建構稽核,維護建構基準的完整性

特定目標與實務的關係如下圖:



NSIS .NET Version

方法一:
使用GetCORVersion
可參考:
用法如下:
System::Call "mscoree::GetCORVersion(w .r0, i ${NSIS_MAX_STRLEN}, *i) i .r1 ?u"
Pop $0
此用法為判斷C:\WINDOWS\Microsoft.NET\Framework裡面的.NET版本資訊。
但僅限於到2.0的版本。
我的電腦已安裝到4.0的版本如下:

但使用此方法顯示出來的版本號碼為:

方法二:
利用Registry來做判斷
可參考:
用法如下:(判斷是否有安裝3.0)
StrCpy $R1 "SOFTWARE\Microsoft\.NETFramework"
StrCpy $R2 0
StartEnum:
EnumRegKey $R3 HKLM "$R1" $R2
StrCmp $R3 "" noDotNet notEmpty
notEmpty:
StrCpy $R4 $R3 1 0
StrCmp $R4 "v" +1 goNext

StrCpy $R4 $R3 1 1
StrCmp $R4 "3" +1 goNext

StrCpy $R4 $R3 1 3
StrCmp $R4 "0" +1 goNext
MessageBox MB_OK $R3
Return
goNext:
IntOp $R2 $R2 + 1
goto StartEnum

noDotNet:
MessageBox MB_OK "You must have the 3.0 or newer .NET Framework installed!"
Quit
我的電腦在Registry的.NET資訊如下:

可取得有3.0的版本資訊

此方法可用於判斷是否已安裝需要的.NET版本。

2010年6月1日 星期二

NSIS Sections

NSIS的安裝與移除由許多的Sections所構成。Section的名稱若是安裝的部份,則用一般名稱即可,例如:"Section1"。若為移除的部份,則名稱前面加"un.",例如:"un.Section1"。
在自訂頁面的選項加入Page components即出現Section選取的畫面。

若要使Section3消失在頁面,可在名稱中加"-",
例如:
Section "-Section3"
SectionEnd


即消失在頁面中,且在執行Installer中會執行Section3的部份。

若要使Section1必勾選,則加入"SectionIn RO"。如下:
Section "Section1"
SectionIn RO #Read Only
SectionEnd


若要使Section2預設沒勾選,則在Section後加"/o"。如下:
Section /o "Section2"
SectionEnd