如何將自訂參數傳入 Installer 類別的 Install 方法

雖然 Windows Setup Project 安裝專案很好用,也可以自訂使用者介面,但限制頗多,只要自訂的使用者介面多一些條件就沒辦法客製化了,所以我們打算改用 NSIS 進行安裝過程的介面自訂,最後再將透過 UI 介面取得的參數傳入 Installer 類別中,並利用 C# 撰寫的程式碼幫我們完成 Post-Install 的動作執行,例如安裝 IIS 站台、建立資料庫、建立使用者或群組、... 等。

首先我是先看到 Installer 類別中的 Install 方法可以傳入一個 IDictionary 的資料:

Installer.Install 方法

最近研究了 Msiexec.exeInstallUtil.exe 工具,試圖想在 Post-Install 的過程可以傳入準備好的自訂的參數到 Installer 類別,雖然 Installer 類別中的 Install 方法可以傳入一個 IDictionary 的資料,不過我就是從 Msiexec.exeInstallUtil.exe 工具中找不到有任何方法可以傳入自訂的參數集合。

最後才發現原來有個 AssemblyInstaller 類別可以用,透過這個類別來包裹 InstallUtil.exe 工具進行安裝動作,就可以輕易的傳入任意參數到安裝過程的各種 method 中。

但才開心沒多久,這條路又被堵住了,透過 Reflector 查看 Install 方法才發現,原來傳入的 savedState 參數在傳入的時候就會立即被一行 new Hashtable(); 給複寫掉,所以傳入任何參數也都是沒用的。

AssemblyInstaller.Install method: 傳入的 savedState 被蓋掉了 

不止 Install 方法不能傳,Commit, Rollback, Uninstall 方法也都會被複寫掉,所以這條路是不通的。

而且由此可知,在 Installer 類別內的 savedState 僅用於安裝過程中紀錄各種安裝狀態用,並無法用來做其他用途,例如當成傳入參數的管道!

那好吧,該試的方法 "應該" 都試了吧,使用 Windows / .NET 內建的安裝工具我覺得已經無解了,如果有人有方法,煩請告知!

目前我只能向外發展,找尋 NSISPlug-insInnoSetup 等不同的安裝部署解決方案,讓我能夠自訂更細的安裝過程。

我個人是還在期待 WiX 的降臨,因為 WiX 3.0 的 Beta 版即將結束,馬上就要 RTM 了,且未來會整合進 Visual Studio 2010,成為新的預設安裝專案類型,到時應該會有更完善的開發介面,而不用再辛苦的撰寫 XML 定義檔了吧。

相關連結

  

此文章由 will 發表於 2009/2/28 下午 02:33:13

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: .Net

標籤: , , ,

收藏:

產生 RSS Feed 時要記得加上 pubDate 欄位 ( RSS Toolkit )

若說到要利用 ASP.NET 處理 RSS 文件,我們幾乎都只使用 ASP.NET RSS Toolkit 來開發程式,不管是讀入 RSS 文件,或是提供 RSS Feed 都很方便使用,而且還支援強型別功能,讓你開發起來特別得心應手。

我們之前就有個案子用上了這個,且我們的工程師參考了 Using an ASHX handler to publish a feed 這篇文章進行開發,網站也已經上線好久了,我自己也有用 Google Reader 進行訂閱動作,似乎都沒什麼問題發生。

不過最近客戶卻反應,為什麼 RSS 的前三筆永遠是固定的三篇文章,我也很直覺的回他:「不可能吧,我都有用 Google Reader 在訂閱耶,而且每天都有收到新的訊息,以及最新三筆也都沒有固定啊。」

最後客戶傳給我他的電腦畫面,此時才真相大白,正所謂:「有圖有真相

我的貼身e管家公眾訊息RSS

原來在 IE7 裡,預設的 RSS Reader 是以「日期」做排序依據,但是我 RSS 中所有的項目(item)都沒有設定 pubDate 欄位,導致 IE7 無法以日期進行排序,所以就改以其他條件進行排序,也就因為如此,客戶每次查看 RSS 的時候,永遠都是那幾筆在最上面。

在 CodePlex 上的範例中顯示 RSS 的每一個項目標籤如下:

<item>
    <title></title>
    <description></description>
    <link></link>
</item>

不過比較正確的定義,應該至少要包括 <pubDate> 標籤才對,否則就會遇到與我一樣的問題!

<item>
    <title></title>
    <description></description>
    <link></link>
    <pubDate></pubDate>
</item>

依據 RSS 2.0 Specification 中的定義,所有在 RSS 文件中出現的日期格式都必須以 RFC822: Standard for ARPA Internet Text Messages 中定義的日期時間規範呈現。

在 .NET 中要將 DateTime 格式轉成這個日期時間格式也非常簡單:

DateTime.Now.ToString("r");

雖然 .NET 的 ToString("r") 輸出的是 RFC1123 的日期時間格式,不過 RFC1123 中定義的日期時間格式正好與 RFC822 相容,所以可以直接這樣用!

相關連結

  

此文章由 will 發表於 2009/2/27 下午 03:08:07

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: ASP.NET | Web

標籤: , ,

收藏:

在 Ubuntu 8.04 安裝設定 snmpd 筆記

以下是我在 Ubuntu 8.04 下安裝設定 SNMP Daemon 的過程與筆記,僅供參考:

先安裝 snmpd 與 snmp 套件

apt-get install snmpd snmp

修改 /etc/snmp/snmpd.conf 設定檔

   修改 community string,如下範例中 qu2uZEGa 就是你自己設定的 community string ( 預設為 public )

#       sec.name  source          community
#com2sec paranoid  default         public
com2sec readonly  default         qu2uZEGa
#com2sec readwrite default         private

   設定 syslocation 與 syscontact

syslocation Doggy Digital Creative Inc. IDC
syscontact Will

修改 /etc/default/snmpd 設定檔

   如果你的 snmpd 需要接受遠端來的連線,將 127.0.0.1 部分移除

# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

啟動 snmpd 服務

/etc/init.d/snmpd start

執行 snmpwalk 查看設定值

snmpwalk -v 1 localhost -c qu2uZEGa system

   只要有許多結果輸出就代表運作正常了。

相關連結

  

此文章由 will 發表於 2009/2/26 下午 06:34:27

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Linux

標籤: , ,

收藏:

如何查詢 Linux 的種類與版本 ( Linux Standard Base )

我所經手的 Linux 版本還蠻多元的,有 Fedora, RedHat, Ubuntu, ... 等,且有時後客戶讓我登入他們的 Linux 主機,我第一件事也是先查詢該主機的 Linux 種類與版本,得知 Linux 的種類與版本可以協助我判斷各種不同的 Distribution 之間不同的特性,例如安裝套件時要用 yum 或 apt-get 之類的,各家的 Linux 散佈(distribution) 有時候一些管理指令與預設目錄還差蠻多的。

在 Linux 界有個 Linux Standard Base 規格 (簡稱 LSB),這裡定義了各家 Linux 散佈之間必須共通的規範,否則 Linux 因為是開放原始碼的作業系統,如果真的各自做各自的,有一天一定天下大亂。

也正好 LSB 有定義一個 lsb_release 指令可以查詢 Linux 散佈版本資訊 ( Distribution information ),例如以下指令執行範例:

[root@localhost ~]# lsb_release -a
LSB Version:    1.3
Distributor ID: FedoraCore
Description:    Fedora Core release 3 (Heidelberg)
Release:        3
Codename:       Heidelberg

所以你以後在登入任何有通過 LSB 認證的 Linux distribution 時,就可以透過 lsb_release -a 進行版本查詢了!

相關連結

  

此文章由 will 發表於 2009/2/25 下午 08:08:44

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: Linux | 系統管理

標籤: , ,

收藏:

開發 Windows Azure 應用程式的第一步:註冊、下載、學習

最近想來玩玩 Windows Azure,我照網站上的 註冊 Azure 服務 步驟, 先下載軟了體開發套件,然後就迫不及待的寫出了第一個 Windows Azure 應用程式,結果要部署的時候才發現什麼都不能用,因為要部署 Windows Azure 應用程式一定要先註冊服務才能使用,否則你的就只有你自己的電腦這麼大而已。

註冊 Azure 服務

當我上週五晚上寫完第一支程式後,才發現要去註冊,可能是還蠻多人在註冊的,所以等了好久都沒有消息,不過今天早上終於收到 Windows Azure 的 Invitation Code 了,總共等了 3 天時間才拿到,所以我建議各位想玩 Windows Azure 的人先去註冊吧,因為要等好幾天才收的到。

Invitation Code to Windows Azure

在申請到 Invitation Code 之前,你若在 Azure Services Developer Portal 新增專案 ( New Project ) 時,你會發現許多功能都不能用,那是因為你尚未取得適當的權限,總之,就是先去註冊吧。

其實你只要下載並安裝 Windows Azure 軟體開發套件Windows Azure Tools for Microsoft Visual Studio 就已經可以開始開發應用了,只是註冊完成並啟用 Invitation Code 之後才能正式部署到微軟的 Azure 服務平台,並且可以對外提供服務。

對我來說,我習慣快速上手(Quick Start)的方式,就是先看「影片」進行學習,從別人開發/操作的過程先感受整個開發的感覺,你可以在 Azure Services Platform Videos 找到一系列快速上手的影片,我看完 #2 | How Do I: Get Started Developing on Windows Azure? 就把第一支 Windows Azure 程式寫出來了,只是上週看到 #1 | How Do I: Deploy a Windows Azure Application? 才感覺很挫折 (因為忘記先註冊服務)。

相關連結

  

此文章由 will 發表於 2009/2/24 下午 12:17:51

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: Windows Azure

標籤:

收藏: