如何使用登錄檔(.reg)進行新增、修改或刪除登錄機碼和值

操作登錄項目(Registry)是我經常做的事情,所以也常累積不少登錄檔(*.reg)隨時可供設定或移除,不過一般人可能比較少這樣處理,在此我就分享幾個操作登錄項目的一些小技巧。

匯出登錄機碼

無論如何,在測試修改機碼之前最好還是先備份一下,以一整個 "機碼" 為單位匯出(左側的每個資料夾都叫做機碼或稱子機碼),匯出成 *.reg 檔後,日後若改錯或出問題時,點兩下即可修復機碼。

登錄編輯程式 :: 匯出登錄項目

匯出後的格式像以下這樣,而我就是經常設定這種 *.reg 的檔案幫我更新、刪除一些系統常用機碼設定:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchScopes]
"DefaultScope"="{05C72334-11F3-4e9f-8740-98128F52EFB9}"
"Version"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchScopes\{xxxx-xxxx}]
"DisplayName"="Google"
"URL"=http://www.google.com/search?hl=zh-TW&esrch=BetaShortcuts&q={searchTerms}&lr=

新增或更新機碼值

我這陣子處理了許多開發環境的問題,其中幾天前講的 [ 安裝 Visual Studio .NET 2003 開發主機筆記 ] 就有提到如何解決 [HTTP - 401.1 未授權登入失敗] 的問題,這問題基本上只要新增一個機碼就能夠解決,而我就將這個「新增機碼」的動作儲存成 *.reg 檔,以後有其他電腦要設定環境時,直接 Double Click 就可以解決問題。

像這個問題需要在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 機碼中新增一筆 DisableLoopbackCheckDWORD 值,假設檔名我取成 Set-DisableLoopbackCheck.reg 內容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"DisableLoopbackCheck"=dword:00000001

備註:若「機碼」本身不存在,執行 *.reg 的時候會自動建立所有不認識的機碼,無須在特別另外建立。

刪除機碼值

如上一個範例,若要將 DisableLoopbackCheckDWORD 值刪除,就可以用以下語法進行刪除:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"DisableLoopbackCheck"=-

這裡的重點就是設定的地方要設定成一個減號 ( - ),這就代表著「刪除」的意思。

刪除登錄機碼

跟身除機碼值不同,刪除機碼將會連同機碼機碼值、與所有子機碼都一併刪除,算是個殺傷力相當大的語法,必須小心使用。

若你想將 Visual Studio 2008 最近開啟的專案(Recent Projects)全部清空的話,可以利用以下 reg 檔直接刪除機碼並重建機碼。

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList]

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList]

相關連結

  

此文章由 will 發表於 2008/11/30 上午 11:35:56

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

分類: Visual Studio | 系統管理

標籤: , , , ,

收藏:

寫 ASP.NET 可利用 <asp:PlaceHolder> 降低 ViewState 大小

前幾天在調整一個網站的執行效能時,發現有幾頁的 ViewState 特別大,但是內容卻蠻簡單的,最主要就是一個 Repeater 控制項,內容不多,但 ItemTemplate 中只有用到一個 LinkButton 控制項,其他都是一般的 HTML 標籤加上 DataBound 語法 ( <%# Eval("XXX", "") %> ),由於我有用到 UpdatePanel 包住這個 Repeater 控制項,所以我 ViewState 不能關閉,關閉就會導致錯誤發生,所以我只能在 ItemTemplate 盡可能降低 ViewState 的使用,不過就因為除了 LinkButton 控制項之外的地方我都沒有可以調整的地方,才讓我想到還有個 PlaceHolder 控制項可用。

我簡單做了個範例說明這整件事,但我把 LinkButton 移除了,單純介紹在 Repeater 的 ItemTemplate 中的語法如何會佔用 ViewState 空間:

Default.aspx

<%@ Page Trace="true" Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html><body><form id="form1" runat="server">
    <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <ol> </HeaderTemplate>
    <ItemTemplate>
        <li><a href="<%# Eval("URL", "") %>"><%Eval("TITLE", "")%></a></li>
    </ItemTemplate>
    <FooterTemplate> </ol> </FooterTemplate> </asp:Repeater>
</form></body></html>

Default.aspx.cs

using System;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page
{
    class DataItem
    {
        public string URL { get; set; }
        public string TITLE { get; set; }

        public DataItem(string _url, string _title)
        {
            this.URL = _url;
            this.TITLE = _title;
        }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        List<DataItem> data = new List<DataItem>();

        data.Add(new DataItem("http://www.miniasp.com/", "多奇數位"));
        data.Add(new DataItem("http://blog.miniasp.com/", "The Will Will Web"));
        data.Add(new DataItem("http://msg.nat.gov.tw/", "我的貼身e管家"));

        Repeater1.DataSource = data;
        Repeater1.DataBind();
    }
}

在以上範例中,你會看到在 ItemTemplate 中有出現一段

<li><a href="<%# Eval("URL", "") %>"><%Eval("TITLE", "")%></a></li>

但是我開啟 Page Trace 之後,卻發現這一段是會佔用不少 ViewState 的,而且會將原本應該產生 LiteralControl 的,因為使用了 DataBound 的語法而被轉成 DataBoundLiteralControl 控制項,而這個控制項是會保留 ViewState 的,但我們在 *.aspx 頁面中卻無法關閉:

控制項樹狀結構

所以我在這些 HTML 資料的前後加上一個 PlaceHolder 控制項,並設定 EnableViewState 為 false 就可以把 ViewState 全部關掉了,若你 ItemTemplate 中的資料量很大的話,可省下的空間不可小覷。

更新過的 Default.aspx 如下:

<%@ Page Trace="true" Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html><body><form id="form1" runat="server">
    <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <ol> </HeaderTemplate>
    <ItemTemplate>
    <asp:PlaceHolder runat="server" ID="PlaceHolder1" EnableViewState="false">
        <li><a href="<%# Eval("URL", "") %>"><%Eval("TITLE", "")%></a></li>
    </asp:PlaceHolder>
    </ItemTemplate>
    <FooterTemplate> </ol> </FooterTemplate> </asp:Repeater>
</form></body></html>

若想看由 ASP.NET 自動產生的 *.cs 程式原始碼的話,可以修改 web.config 中在 <system.web> 底下的 <compilation debug="false"> 改成 <compilation debug="true"> 後,重新執行一遍這一頁,再到 Temporary ASP.NET Files 目錄下查看產生過的原始碼即可,通常這個目錄預設會放在以下路徑:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

相關連結

  

此文章由 will 發表於 2008/11/29 上午 11:34:40

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

分類: .Net | ASP.NET

標籤: , ,

收藏:

安裝 Visual Studio .NET 2003 開發主機筆記

最近接手了一個 ASP.NET 1.1 的維護案,因此架設了一台專門用來開發這網站的主機,但設定的過程中卻遇到一些阻礙,當然也一一的排除了,在此紀錄一下過程。

安裝的過程如下:

  1. 安裝 Windows Server 2003
    1. 安裝 IIS 6.0 + SMTP Service + FrontPage Server Extension
    2. 安裝 Windows Server 2003 Service Pack 2
    3. 安裝 .NET Framework 1.1
  2. 安裝 Microsoft SQL 2000 Server
    1. 安裝 Service Pack 4
  3. 安裝 Visual Studio .NET 2003 開發工具
    1. 安裝 Service Pack 1

安裝完成之後,就要設定環境了,這才是挑戰的開始。

  1. 設定資料庫 環境
    1. 將所有開發用資料庫還原
    2. 設定好正確的登入與使用者權限 [ 相關文章 ]
  2. 設定 IIS 的預設 SMTP 虛擬伺服器
    1. 修改「轉接限制」,並允許 127.0.0.1 可轉送(Relay)郵件
  3. 設定 IIS 的應用程式集區(Application Pool)
    1. 新增應用程式集區(可以共用一個集區,或一個網站一個集區,或一個服務一個集區)
  4. 設定 IIS 的網站
    1. 新增網站站台(Website)
    2. 將新增的網站站台設定「配置 Server Extension 2002」(如下圖)

      配置 Server Extension 2002
  5. 設定 Visual Studio .NET 2003 開發工具
    1. 開啟 Visual Studio .NET 2003 開發工具
    2. 新增空白方案( Blank Solution )
    3. 從網站新增現有專案 ( Add Existing Project from Web )
    4. 指定 IIS 中網站網址 http://localhost/
      Add Existing Project from Web
  6. 完工。

目前為止感覺一切都十分完美。

問題一:站台無法配置 Server Extension 2002

不過當我要新增第二個網站專案時,設定到 配置 Server Extension 2002 就發生以下錯誤:

HTTP - 401.1 未授權登入失敗

而且一直叫我輸入帳號、密碼,我打了幾十遍的密碼,總之就是無法登入成功,讓我一直無法將該站台配置 FrontPage Server Extension 的支援。東試、西試的就是無法解決登入的問題,當初一直覺得是「權限」的問題,趕最後終於在微軟技術支援網站找到解決方法,上面寫得很清楚,我就不再贅述。

問題二:站台無法重整 Server Extension 2002 Web

第一個問題解決了,又接連遇到第二個類似的問題。

我接手的專案中其實有些前人留下的 FrontPage Server Extension 相關 meta 檔,就是那些 _private, _vti_cnf, _vti_pvt, _vti_script, _vti_txt 之類的目錄,因此導致我無法從 IIS【重整 Server Extension 2002 Web】( 如下圖 )

重整 Server Extension 2002 Web

這時,只要將網站根目錄下的這些目錄直接刪除,就可以重新【配置 Server Extension 2002】了!

問題三:Visual Studio .NET 2003 中的 ASP.NET 1.1 專案無法編譯與除錯

第三個問題,就是我從 Visual Studio .NET 2003 載入專案後,網站內的 Bin\ 目錄下的 dll 雖然在專案內,但是卻無法進行建置與除錯,都顯示找不到元件的問題,而我的解決辦法就是先找到 Visual Studio .NET 2003 編譯時暫存的目錄【C:\Documents and Settings\Administrator\VSWebCache】,然後將未複製到 bin 目錄下的組件手動先 Copy 過去,就可以正常編譯與除錯了。

  

此文章由 will 發表於 2008/11/28 下午 05:26:47

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

分類: .Net | ASP.NET | Visual Studio

標籤: , ,

收藏:

手邊有一張速查表(Cheat Sheets)是件很方便的事

我個人有習慣收集一些網路上別人整理的速查表,因為程式開發的細節真的太多了,要能全部背起來不太可能,也沒什麼意義,甚至於有人說程式設計就是一件查詢、複製、貼上的工作而已。對我來說,寫程式首重觀念與經驗,有了完整而正確的觀念,就算記不得要怎麼寫,查詢一下就馬上能寫了;而有了經驗,對於一些難解的 Bug 自然能夠迅速解開。

所以當我在開發網站時只要開啟速查表文件,有時後看表提醒一下用法,馬上就可以解決問題。例如:像我之前是寫 PHP 好多年之後才突然轉換到 C# / ASP.NET 的,而當初我剛學 .NET 時,對 .NET 的 String.Format 十分感冒,因為不會用,且當時輸入的範例又寫的很不清楚,有時後為了輸出一個 NT$ 1,000,000.00 這樣的格式都要寫好久,真的很氣人。直到有一天在 John Sheehan 這位仁兄的網站看到 .NET Format String Quick Reference 這份速查表文件,因為講解的仔細又有範例,讓我一下子就掌握所有 String.Format 的用法,而這份文件也是我最常用的速查表之一。

以下是我這陣子累積整理的 Cheat Sheets 相關連結,各位如果有覺得不錯的也可以推薦給我,我再放上來:

C# / .NET / LINQ 相關

Visual Studio 相關

ASP.NET 相關

SQL Server 相關

Subversion 相關

Reqular Expression 相關

CSS 相關

HTML / XML / RGB 相關

ASP / VBScript 相關

PHP 相關

JavaScript 相關

系統管理

  

此文章由 will 發表於 2008/11/27 下午 03:23:08

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

分類: .Net | ASP.NET | C# | CSS | JavaScript | LINQ | PHP | Security | SQL Server | Subversion | VBA | Visual Basic | Visual Studio | Web

標籤: , , , , , , , , , , , , , , ,

收藏:

在網頁中設計 Word 格式匯出功能最簡單的方式

這其實是個很簡單的技巧,不過好像還是有些人不知道的,所以今天臨時想到就寫下來分享。不知道 Office 從何時開始支援開啟 HTML 文件,也就是說任何 HTML 的文件其實都可以在 Word 中直接開啟,甚至於你可以在瀏覽網頁時將網頁上的文字進行複製,然後到 Word 中貼上是可以保留網頁上的格式設定的。

當我們希望在網頁中提供 "Word 格式匯出" 功能時,其實最簡單的方式就是直接輸出 HTML 格式的內容,並且直接將下載檔案的副檔名改成 *.doc 即可。

若以下範例來說,<h1> 會自動轉譯成 Word 中的 "標題一" 段落樣式,而 <h2> 會動轉成 Word 中的 "標題二" 樣式。

<html>
<head>
<style> p { color: blue; } </style>
</head>
<body>
    <h1>這是文章標題</h1>
    <h2>這是文章副標題</h2>
    <hr/>
    <p>段落一段落一段落一段落一段落一段落一段落一段落一段落一段落一段落一段落一</p>
    <p>段落二 段落二 段落二 段落二 段落二 段落二 段落二 段落二 段落二 段落二 段落二</p>
</body>
</html>

除此之外,Word 可以認識的還不只這些,你若在網頁中設定 CSS 也是可以的,彈性十分的大。但要特別注意,載入 CSS 時不能用 Link 的方式,因為 Word 並不會載入外部的 CSS 定義檔!

而對我來說,最方便的地方莫過於寫一個【文件產生器】了,利用 HTML 產生一組文件的內容,然後用 Word 開啟後再進行後續的排版編輯、設定整體的樣式等,非常的有效率。



		
  

此文章由 will 發表於 2008/11/26 下午 11:56:00

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

分類: ASP.NET | Web

標籤: , ,

收藏: