2008年12月30日 星期二

PowerGUI Script Editor

要寫 PowerShell 的 script 是一件痛苦的事,因為不像 c# 有 Visual Studio 的 IDE 開發環境支援。
因此, PowerGUI 誕生了。請參考這裡

2008年12月29日 星期一

Sql Server 改 Computer name

Sql Server 在安裝前,必須先設好 Computer name。如果安裝後才想改Computer name,就會有些問題。如果實在需要改 Computer name, 請參考

http://msdn.microsoft.com/en-us/library/ms143799.aspx

2008年12月21日 星期日

第一次使用 Crystal Report, 感覺很差

使用 Crystal Report, 真的是吃了不少苦頭。

        Crystal Report 的確有相當不少的優點。但也有不少的缺點。

  1. 對於開發人員不夠友善。例如想要全選/複製,就常常會碰釘子。小技巧:不要選到特殊的 image control,就可以多選。當多選時,找不到複製的編輯命令時,就代表有些 control 無法與別的 control 一起複製。
  2. 效能不佳。我想要使用 Crystal Report 輸出成 PDF,因為其輸出的 中文PDF 可以使用搜尋文字的功能,而Reporting Service 輸出的 中文PDF 卻不行。(20090217 見 http://msdn.microsoft.com/zh-tw/library/ms159713(SQL.90).aspx, 在 sql server 2005 sp3 已有 embbed font了,就可以搜尋)。但沒想到Crystal Report 輸出成 PDF 的效能卻奇差無比。每轉一張竟要 1.4 秒 (at Intel Core2 CPU 6300@1.86GHz, 3.00 GB Ram)
  3. 要license. Visual Studio 內附的是陽春版,只能同時 5 個 client存取。多了就會出 Exception. 不像 Reporting Service (Client, rdlc),是免費的。
  4. 買了開發版後,也有限制,PrintJobLimit 就是我碰的一例。
  5. 在開發機器裝了 Crystal Report 2008 後,可以開發了。但一旦重開機後,在 Visual Studio 2008 開啟報表,就會出現如圖一的嚴重錯誤。把整個 Visual Studio 弄掛掉。或者如圖二的錯誤訊息。圖二的錯誤訊息,相信寫 C++ 的人並不寞生,這是使用指標寫資料到memory,寫錯了長度造成的memory crash。
  6. 很秏資源。每產生一個 PDF 檔,伺服器Memory 就秏掉了2-3 MB,必須等到下一次的 Garbage Collection 時才會回收。在 C:\Windows\Temp 也需要產生 *.rpt 的暫存檔案。因為很秏資源,又無法改進,只好加入 PrintJobLimit 來限制出錢的客戶。雖然可以修改 registry 來修改限制的上限,那也只不過是倒果為因罷了。

我目前的建議:不要使用 Crystal Report,除非有特殊原因。因為感覺很差啦!

圖一:一打開就掛掉

image

圖二:有些則是

image

2008年12月18日 星期四

Print Job Limit 報表次數的限制

第一次使用 Crystal Report ,但在壓力測試時發生了問題。

在每經一段時間後,Web Server 就再也無法吃報表的需求了。

clip_image002

錯誤原因是:載入報表失敗

clip_image004

查到一個 resource http://blog.csdn.net/daisylh/archive/2006/12/12/1439312.aspx ,說明 ReportDocument 記得要 Close(), 所以我就改成如下的程式

      ReportDocument customerReport = new ReportDocument();
      customerReport.Load(reportFilePath);
      customerReport.SetDataSource(rs);
      ExportOptions exportOpts = new ExportOptions();
      PdfRtfWordFormatOptions pdfOpts = ExportOptions.CreatePdfRtfWordFormatOptions();
      exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
      exportOpts.ExportFormatOptions = pdfOpts;
      response.Clear();
      response.Buffer = true;
      response.ContentType = "application/pdf";
      customerReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
        response, false, "aaa.pdf");
      customerReport.Close();
      customerReport.Dispose();
可惜,沒有用。我發現 ExportToHttpResponse 執行完後,網頁就結束了。下面兩行的 Close() 與 Dispose() 是不會執行的。 改成如下的 using block,就可以了,
      using (ReportDocument customerReport = new ReportDocument()) {
      customerReport.Load(reportFilePath);
      customerReport.SetDataSource(rs);
      ExportOptions exportOpts = new ExportOptions();
      PdfRtfWordFormatOptions pdfOpts = ExportOptions.CreatePdfRtfWordFormatOptions();
      exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
      exportOpts.ExportFormatOptions = pdfOpts;
      response.Clear();
      response.Buffer = true;
      response.ContentType = "application/pdf";
      customerReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
        response, false, "aaa.pdf");
      }

2008年12月15日 星期一

Vista 的 Opened Program,有些程式無法執行

一直很困擾我的一件事。我的 Vista 的 Opened Program,有些程式無法執行。
例如 Office 等。

然而,不使用Opened Program 或 Pined Program 來執行,改以 All program/Microsoft Office/...來執行就可以。
這樣好難過。

為什麼呢?今天終於狠下心來,找到了答案。
答案很機車,竟是 Context Menu item 不對。

所謂的 Context Menu item 即右鍵的快速Menu。如果其上有不對的項目,就會發生許多怪異的現象。

我的例子,就是安裝過 Foxy, 然後移除。然而 Context Menu 並未移除掉。(bug?) (天之聲:誰叫你安裝惡名昭彰的 Foxy...)

之後,就一直這樣了。

要如何解這個問題呢?我使用了shexview , 然後將 Foxy 的項目 disable 就完成了。

image
我還以為中毒了呢!(天之聲:哪來這麼多毒)

Hyper-V MMC Snap-In

使用遠端桌面來操作 Hyper-V MMC Snap-In時,有個常見的問題。也就是使用 mouse 進入 guest 時,會發生 Mouse not captured in Remote Desktop session. 的警告,如下圖。

image

此時,按照說明來試著安裝 Integration service ,卻怎麼樣也行不通。看來是我的天份不足了。

不過, Virtual Server 2005 可使用 Internet Explorer 來模擬 Console,反而 Hyper-V不行?這說不通了。

原來,Hyper-V也有類似的功能,只不過不能使用 Internet Explorer 而已。

參考 Description of the Windows Vista Service Pack 1 Management Tools update for the release version of Hyper-V ,安裝後就可使用 Snap-In 來操作了。

2008年12月11日 星期四

整合 Windows Vista 和 Office 2007 的基礎學習園地

整合 Windows Vista 和 Office 2007 的基礎學習園地

為了讓一般使用者更加了解 Windows Vista 和 Office 2007 的使用方法,我們在技術支援網站上特地彙整來至 Windows Online, Office Online 以及 TechNet 網站上有用的 how-to 文章,線上學習視訊和網路廣播等豐富學習資訊,敬請善加利用。立刻體驗...


線上立即傳送技術問題
選取一項產品來檢視此產品可用的支援選項

線上檢視問題處理狀況
登入 Windows Live ID 後,您就可以線上檢視 已傳送的問題處理狀況

IIS 6 上的 FTP Site 如何設定使用者目錄

找了一會兒。原來預設沒有「使用者目錄」的功能。

如果要建立,必須參考這一篇 http://www.microsoft.com/taiwan/technet/community/columns/insider/iisi0606.mspx

2008年12月8日 星期一

System.Security.Cryptography.CryptographicException: Key not valid for use in specified state

今日測試時,在下列第二行一直發生System.Security.Cryptography.CryptographicException: Key not valid for use in specified state 的錯誤。中文訊息是「機碼用在特定狀態時無效」

RSACryptoServiceProvider provider = cert.PrivateKey as RSACryptoServiceProvider;

RSAParameters signPrivateKey = provider.ExportParameters(true);

沒看過耶!查了 Google 大神也是無效。
結果,重匯 pfx (即有私鑰的憑證) 就好了?

真是怪

今日證實,是程式寫錯了。
使用provider.ExportParameters(true),即將私鑰匯出,這是不對的。
我只需要將私鑰拿來簽章即可。
如下

      XmlDocument doc = new XmlDocument();
      doc.LoadXml(origXml);

      //匯入私鑰
      X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
      store.Open(OpenFlags.ReadOnly);
      X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByThumbprint, certificateThumbPrint, true);
      if (certs.Count == 0)
        throw new CryptographicException("The certificate could not be found.");

      X509Certificate2 cert = certs[0];

      RSACryptoServiceProvider provider = cert.PrivateKey as RSACryptoServiceProvider;

      SignedXml signXml = new SignedXml(doc);
      signXml.SigningKey = provider;

Share with Facebook