發表文章

目前顯示的是 1月, 2009的文章

如何手動或程式化產生XPS文件

圖片
文:吳俊毅 時間:2009/1/18 何謂XPS文件 XPS為(XML Parse Specification)的簡稱,我們知道XML已經是開放式資料交換的標準,於是以XML為基礎要提供一個更穩固的,開放的可信賴的電子文件交換格式應運而生,就是XPS,它可以經由硬體或是軟體來閱讀並提供更佳的列印品質,並可加入簽章容易用於機密文件的封存,微軟在Office 2007也已經完整加入此功能,Word 2007的docx其實就是XML Parse Specification文件格式。在.NET Framework 3.0中提供完整的API讓您能輕易的發佈或是匯入XPS文件,或是與WPF應用程式的整合等,今天筆者將完整介紹XPS,產生XPS方式,如何使用.NET Framework 3.o的API來產生XPS格式文件,廢話不多說,我們開始吧! XPS文件的結構 所謂的XPS文件其實是一個ZIP檔案,若讀者將其附檔名改成.zip使用Winzip或是一些支援ZIP的檢視器即可看見期內容,當然Windows XP/Vista的檔案總管本身即也支援ZIP解壓縮。 雖然我們通常並不會直接去編輯XPS文件的壓縮內容,但了解其內部包裝的內容對於我們快速的了解XPS是有幫助的,一個XPS文件的內容如下: XPS的物件階層 XPS文件定義在.NET Framework 3.0定義在XpsDocument類別中,該類別則定義在System.Windows.Xps.Package;的命名空間中,XpsDocument為一個完整XPS檔案組成,它定義了XPS整個的邏輯結構,由於一個XpsDocument是允許包含多個文件,這些文件則由FixedDocumentSequence來描述其順序關係,所以通常一個XpsDocument下會包含一個FixedDocumentSequence物件,FixedDocumentSequence下面會有FixedDocument物件來包裝FixedPage物件,整個XpsDocument結構如下圖: 產生XPS文件的幾種方式 1. 使用Microsoft XPS Document Writer印表機 2. 使用.NET Framrwork 3.0的System.Windows.Xps.Package命名空間提供的類別來產生 要產生XPS文件最快的方式當然是使用Micr

WPF 與XBAP應用程式(2) 之 如何佈署XBAP應用程式

圖片
文:吳俊毅 時間:2009/1/8 接續第一篇WPF 與XBAP應用程式,我們已經可以正常的在Visual Studio 2008中正常的執行WpfBrowserBrushTest這個專案,但是這樣還沒完,我們必須將它佈署至IIS上頭,這樣才能夠使一般的使用者使用一般網站一樣的在IE中開啟這個網頁。 首先切換到專案的屬性畫面,並點選發行,表示我們將使用ClickOnce方式佈署,注意:這個動作需要以管理員身分來執行Visual Studio 2008,畫面如下:   請點選發行精靈按鈕,並如上圖的步驟建立一個名稱為WpfBrushTest的Web應用程式。若不是以管理員身分執行Visual Studio 2008,”本機IIS”按鈕是無法點出如圖中以結點方式顯示的本機的Web伺服器的畫面。   由於目前ClickOnce以內建在Visual Studio 2005/2008的專案屬性視窗內,ClickOnce為微軟推出,一套簡化許多安裝程序的一套安裝程式的Framework,有興趣的讀者可以參考筆者另一篇ClickOnce的文章!我們先走完我們的流程吧。 上面的動作很迅速的在IIS裡幫我們建立出一個應用程式,由於筆者使用Vista,Vista內建的是IIS 7的版本,如果讀者使用的Windows 2003或Windows XP等畫面可能會有些不太一樣,如下,筆者打開IIS 7看見並可點開WpfBrushTest站台   接著請讀者切換到內容檢視畫面,IIS 6或IIS 5.5不需要做此動作,然後在WfpBrowserBrushText.xbap按滑鼠右鍵點選瀏覽,表示直接執行這個應用程式,這時候IE上頭會顯示 未受與信任,如下: 如果點選開啟錯誤按鈕可以看見如下的詳細錯誤: 錯誤詳細資料 執行此作業時,偵測到下列錯誤。 * [2009/1/10 下午 11:05:15] System.Deployment.Application.TrustNotGrantedException (未知的子類型) - 使用者拒絕將執行所需的權限授與此應用程式。 - 來源: System.Deployment - 堆疊追蹤: 於 System.Deployment.Application.ApplicationTrust.Requ

Manifest與Vista下的安全性設定

圖片
撰文:吳俊毅 時間:2009/1/3 本篇文章使用Visual Studio 2008 Team System 本文主要探討關於Vista新增的UAC安全性設定,以及如何使用manifest設定檔案使程式具備管理者權限,這個部分牽涉範圍很廣,首先什麼叫做UAC呢,UAC是(User Access Control)的簡稱,意思是”使用者帳戶控制”,在Vista下預設也使用須具備管理者權限才可以執行的相關操作都會跳出一個如下確認的小視窗: 若點選繼續,程式才會繼續執行,否則取消程式的執行,這通常是在Vista下已預設一些動作是需要管理者權限才可以進行的一些動作,即使您已經是以Administrator權限登入,在執行系統管理工具,修改Windows或是Program Files下的檔案,或修改登錄檔,啟動與停止系統服務等等,都會跳出如上的確認對話框,即使您只是要執行諸如mmc.exe或regedit.exe等相關程式也是一樣。 也就是說在Vista下面沒有一個應用程式是具備管理者權限執行的,即使是Windows的殼層,就是俗稱的Shell,也就是Explorer.exe也不具備管理者權限,這樣許多使用者會覺得過於繁瑣,不過筆者倒是認為這是一種極佳的保護機制,如果由一個依附在Explorer.exe執行的病毒一樣會繼承Explorer的權限,甚至只是一個Process當中的Thread要進行一些需授權的動作,均會跳出這個視窗,如果使用者認為現在並未執行這個動作可按下取消便限制病毒不當的一些作業。 OK!太多的UAC細節我想另闢章結來討論好了,本文的重點是,既然Vista下執行的應用程式預設都不具備管理者權限,那如果我們開發的.NET應用程式有些動作是必須以管理者權限執行的,而在User端執行總不能說要User你用滑鼠右鍵自己點選管理者權限執行該程式,或是關閉UAC!那更不妥當,怎麼辦呢,我們的應用程式就是需要以管理者權限執行阿。沒關係,有辦法,讀者在執行一些應用程式時應該有看過這一類的確認視窗: 這個對話框表示這個應用程式需要您的授權成為管理者權限來執行,但如何做呢?在Vista下可對應用程式加上一個manifest檔案告訴Vista,此程式執行須以管理者權限來執行。

WPF 與XBAP應用程式(1)

圖片
文:吳俊毅 時間:2009/1/1 開發環境: Visual Studio 2008 Team System 今年未去迎接2009年的第一道曙光,且筆者很久沒寫作文章了,所以想說寫一些關於WPF與XBAP應用程式 所謂的XBAP為(XAML Browser Application)的簡稱,他本身即是WPF應用程式,唯一不同於Window Form的WPF應用程式的是它是以Browser為Container,但是它執行的機器必須是有安裝.NET Framework 3.0的機器才可以執行,且IE7預設即為XBAP的Container,若您使用Visual Studio 2008 開啟一個WpfBrowserApplication專案並打開Page1的CS檔案會發現他是繼承Page這個類別,如下: public partial class Page1 : Page { public Page1() { InitializeComponent(); } } 而本篇文章為了測試我們撰寫的WPF應用程式能夠順利的移植到XBAP方式在Browser中執行嗎?以下為筆者先全撰寫的一WPF的Brush測試程式,當中有TextBox, Ellipse等相關元件,主要是測試WPF中的TextBox的ImageBrush筆刷的繪圖功能,有興趣的讀者請參考筆者另一篇WPF程式設計的文章,接著來看看這個範例: 此範例程式執行結果如下: 圖中的上面是一個TextBox控制項,使用圖片作為TextBox的底色,且字體也使用圖片作為筆刷,而呈現出來的效果,現在如果要將一改以XBAP應用程式方式執行會是什麼樣的結果呢,首先新增一個WpfBrowserApplication專案,並將下面藍色部分,也就是 .. 標籤內的內容複製到WpfBrowserApplication專案的Page1.xaml的Grid 中。 接著在預覽畫面也可以看見結果,如下圖: 接著我們就直接執行程式,執行後會發生一個錯誤,如下: 讀者應該也會收到此錯誤,這是因為在Browser的Container中預設XBAP應用程式是沒有存取IO的權限的,為什麼獨立的WPF執行檔的應用程式就可以直接執行呢,因為在Vista下獨立應用程式執行預設雖沒有管理者權限,但是還是有基本的IO存取權限,而XBAP為了安全性根據預設是不被完全信任的,許多