20110726

VS2010 – 解決ServiceController權限不足的問題

說明

Windows從Vista開始引進UAC (User Account Control),這是一項不錯的機制,雖然有點煩人,但是至少可以通知使用者目前的動作是會影響到系統的「安全性」。但是對我們這些寫程式的人來說,UAC可就是常常出問題的點了。

例如下面「呼叫特定Windows Service」的程式碼:

  1:         // WindowsServiceStart: 啟動視窗服務
  2:         #region
  3:         public static bool WindowsServiceStart(string strServiceName)
  4:         {
  5:             // 回傳值
  6:             bool bln = true;
  7: 
  8:             // 服務管理員
  9:             ServiceController svc = new ServiceController();
 10: 
 11:             // 取得服務啟動之Timeout
 12:             TimeSpan timeout = TimeSpan.FromMilliseconds(int.Parse(Program.SettingRead(LL.Setting_Service_Timeout)));
 13: 
 14:             try
 15:             {
 16:                 // 設定ServiceName
 17:                 svc.ServiceName = strServiceName;
 18: 
 19:                 // 檢查目前狀態,若不在執行中,或是啟動中,則啟動之
 20:                 if ((svc.Status != ServiceControllerStatus.Running) && (svc.Status != ServiceControllerStatus.StartPending))
 21:                 {
 22:                     svc.Start();
 23:                     svc.WaitForStatus(ServiceControllerStatus.Running, timeout);
 24:                 }
 25: 
 26:                 bln = (svc.Status == ServiceControllerStatus.Running);
 27:             }
 28:             catch (InvalidOperationException)
 29:             {
 30:                 bln = false;
 31:             }
 32: 
 33:             return bln;
 34:         }
 35:         #endregion
 36: 

在Windows XP中運作正常,但是放到了Windows 7的環境中,就會出現以下的錯誤:


20110726-VS2010-01-W


只要看到了圖中的「存取被拒」,問題點在哪兒,心中已有了答案。反正不是權限不足,就是被UAC給擋住了。

就算目前的使用者是屬於「Administrators」群組,只要您不是透過以下二種方式執行程式,那麼,預設您就是沒有修改「Windows Service」的權限:


  • 右點捷徑選取「以系統管理員身份執行」

20110726-VS2010-02-W



  • 點選「UAC」確認視窗

 


解決方法

但是我們是程式設計師,需要以程式來解決這項問題。解法有二:


  • 利用Manifest檔,自動跳出UAC確認視窗,讓使用者在繼續程式前,先行確認 (建議作法)



  • 利用程式,自動重新執行一個可經過使用者授權之程式 (會多出一個程式實體)

1. 在Program.cs中加入以下程式碼

  1:         // IsRunAsAdministrator: 是否以Administrator權限執行
  2:         #region
  3:         public static bool IsRunAsAdministrator()
  4:         {
  5:             // 取得目前執行之使用者權限
  6:             WindowsIdentity wi = WindowsIdentity.GetCurrent();
  7: 
  8:             // 檢查是否為Null
  9:             if (wi == null)
 10:             {
 11:                 return false;
 12:             }
 13:             else
 14:             {
 15:                 return (new WindowsPrincipal(wi)).IsInRole(WindowsBuiltInRole.Administrator);
 16:             }
 17:         }
 18:         #endregion
 19: 
 20:         // ProgramElevateToAdministrator: 詢問使用者是否可將目前程序提昇至Administrator身份 
 21:         #region
 22:         public static void ProgramElevateToAdministrator()
 23:         {
 24:             // 檢查是否已用Admin身份執行
 25:             if (!IsRunAsAdministrator())
 26:             {
 27:                 // 將此程序改為以Admin身份執行
 28:                 ProcessStartInfo prc = new ProcessStartInfo();
 29:                 prc.UseShellExecute = true;
 30:                 prc.WorkingDirectory = Environment.CurrentDirectory;
 31:                 prc.FileName = Application.ExecutablePath;
 32:                 // 指定「runas」屬性
 33:                 prc.Verb = "runas";
 34: 
 35:                 try
 36:                 {
 37:                     // 將會跳出UAC詢問視窗
 38:                     Process.Start(prc);
 39:                 }
 40:                 catch
 41:                 {
 42:                     // 若使用者拒絕,跳出
 43:                     return;
 44:                 }
 45:             }
 46:         }
 47:         #endregion

 

2. 在程式中加入以下程式碼,用以執行新的程式實體 (例如按鈕的事件,或是工具列的事件)

  1:         // SystemUAC: 進行UAC確認
  2:         #region
  3:         private void SystemUAC()
  4:         {
  5:             // 檢查是否為Vista或以上之系統,若是則進行UAC確認
  6:             if (Environment.OSVersion.Version.Major >= 6)
  7:             {
  8:                 Program.ProgramElevateToAdministrator();
  9:             }
 10:         }
 11:         #endregion
 12: 

 


參考


http://stackoverflow.com/questions/3892088/servicecontroller-permissions-in-windows-7

http://www.enusbaum.com/blog/2007/08/26/how-to-run-your-c-application-as-administrator-in-windows-vista/

http://stackoverflow.com/questions/916714/how-to-run-c-application-with-admin-creds

http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

http://csharptuning.blogspot.com/2007/06/impersonation-in-c.html

http://msdn.microsoft.com/en-us/library/1w45z383(vs.71).aspx

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91

http://social.msdn.microsoft.com/Forums/da-DK/winforms/thread/db6647a3-85ca-4dc4-b661-fbbd36bd561f

http://gelis-dotnet.blogspot.com/2009/06/manifestvista.html

VS2010 – 開啟Immediate Window

說明

剛安裝完Visual Studio 2010時,預設在Debug時是不會出現「Immediate」視窗的。此時,我們需要開啟「Debug / Window / Immediate Window」才能顯示出「Immediate」視窗。

 

解決方法

20110725

TFS - TF204017

說明

當我們更換開啟以不同的使用者開啟本機上的專案時,就有可能出現以下的訊息。

20110725-TFS-01-W

此原因在於TFS Server上儲存著各個不同使用者的「工作空間 (Workspace)」,而目前登入的使用者,並不是前次該專案工作空間的擁有人,導致出現此錯誤訊息。

工作空間的預設名稱為「<本機名稱>;網域名稱\使用者名稱」,預設只有對應的使用者可以修改該工作空間的文件。解法方法有二:

1. 建立一個新的Workspace,並將本機資料夾對應到該Workspace

2. 將目前的Workspace設定為Public

 
解決方法
  • 建立一個新的Workspace,並將本機資料夾對應到該Workspace
  • 將目前的Workspace設定為Public (需以有權限的使用者登入)
 
參考

http://social.msdn.microsoft.com/Forums/en-US/tfsgeneral/thread/21440b8d-67c4-4aa5-8a1b-3c747ebbb440/

http://blogs.msdn.com/b/phkelley/archive/2010/02/04/improvements-to-workspaces-in-tfs-2010.aspx

20110722

2008 MLB運動彩券簽注手冊

書名

2008 MLB運動彩券簽注手冊

類型

中文圖書

作者

大A運動.彩券資訊網

出版者

意象文化

ISBN

978-986-84074-5-9

版本

200805 一版

頁數

203

網址

www.biga.com.tw

租借處

國家圖書館

563.6933 8768-2 97

完成日期

20110720

評價

評語: 投注用記錄手冊,表格好用,但用電腦記錄較好。個人認為這本書是在賣投注記錄表格。

實用性: 4.0

簡介

  • 大A運動網為國內一彩券資訊網站,提供MLB, NBA比賽賽程表、球隊戰績、資料,並有專家以各種數據,探入分析單場比賽賽前解盤等點閱收費機制。另有提供彩券網。

 

網址

 

心得

每種行業都是一門學問,運動彩券在一般人看來,只是賭博,但是沒想到光是賭博也是一門很深的學問。這本書雖然只有記錄的表格,但是不難看出其中的涵意ーー賭博也是要科學化。

1%! 國考逆轉勝: 宅男的爆笑高普考日記

書名

1%! 國考逆轉勝: 宅男的爆笑高普考日記

類型

圖書

作者

葉小星

出版者

高寶國際

ISBN

978-986-7799-70-8

版本

201007初版

頁數

159

網址

www.wretch.cc/blog/ark123

租借處

國家圖書館

019 8845:2

完成日期

20100720

評價

評語: 勵志小品

實用性: 4.0

趣味性: 7.5

簡介

以漫畫方式寫出作者個人之國考心酸史。作者想要一個穩定又正常上下班的工作,才可有時間追求自己的漫畫夢想。

 

網址

 

心得

作者為了能夠考上國考,完成自己的畫漫畫的夢想,而能夠痛下決心,成為全職考生努力用功。這真是讓我羨慕的地方。

今年是我新婚的第一年,小孩也即將要出生,為了小孩的未來,我想要考上國考、司法官特考,以便提供孩子一個穩定成長的環境。但是很可惜的,前二年有空的時候,我因循苟且,未能好好把握住唸書的時間;到了今年,諸事紛擾,反倒沒有時間、精力來好好唸書了。

仔細想想,從小到大,我未有一次認真唸過書。雖然喜歡跑圖書館借書,但多半是借了又借,擺在家中作裝飾。每月便是周而復始地把書從家中擺到圖書館,然後又借一些新書來擺。

而且借的書又範圍太雜,未能專一,導致現在年過三十,一事無成。

古人說:「生子方知父母恩」,這句話說得一點兒不錯。有了小孩後,才真正體會到父母的用心良苦;夜深人靜時,想到父母從小的栽培,真的是忍不住想要掉下淚來。

如今之計,惟有努力唸書,完成碩士學業,並考上國考、司法官,以報效父母多年來的養育之恩,光耀門楣,造福人群。

20110720

SQL2005 - Error 5120

說明

當我們將MDF及LDF檔,以Attach的方式,掛載到新的伺服器上時

20110720-SQL2005-01

卻意外地發現,竟然出錯了@@

錯誤訊息是5120。

上網搜尋後,發現這個問題的解決方法不一,不過我可以適用的方法就是「利用Administrator權限來開啟SQL Server Management Studio」

 

解決方法

1. 在「SQL Server Management Studio」的捷徑上右點。

2. 選擇「Run as Administrator」

3. 完成。

 

參考網址

http://www.developers-challenges.com/tips-for-sql/28-sql-server-error-5120.html

20110719

SharePoint – Event ID 10016

說明

安裝完SharePoint Server 2010之後,在系統記錄中出現了以下訊息

20110719-SharePoint-01

上網搜尋後發現是因為啟動的服務帳戶沒有「IIS WAMREG」的管理權限,解決方式就是啟動相關權限。

 

設定方法

1. 開啟「管理」的MMC。

2. 首先我們要先設定Registry中管理者的權限,不然待會兒要修改DCOM Config時,會發現控制項都是「灰色」的,也就是我們沒有權限修改。

3. 要修改的Registry位址為「HKEY_CLASSES_ROOT\AppID\{61738644-F196-11D0-9953-00C04FD919C1}」。詳見影片。

4. 修改好權限之後,我們就可以進行DCOM Config的修改。詳見影片。

 

參考網址

http://support.microsoft.com/kb/920783/en-us

http://computerproblemsolutions.blogspot.com/2011_06_01_archive.html

20110717

Active Directory - 設定Log on as a service

說明

在Active Directory的環境下,有些應用程式 (如SharePoint, Team Foundation Server),需要一個獨特的帳號來啟動服務,此時「Log on as a service」這屬性就派上用場了。

「Log on as a service」的意思就是,讓特定帳號有權限可以將Process註冊為一個Windows的服務。

 

設定方法

1. 開啟「管理」的MMC

2. 詳見我錄製的影片

 

參考網址

http://technet.microsoft.com/en-us/library/cc957141.aspx

http://technet.microsoft.com/en-us/library/cc794944(WS.10).aspx

http://technet.microsoft.com/en-us/library/ms143504.aspx

20110715

GMail - 設定Outlook 2007 IMAP存取GMail上的郵件

說明

GMail可利用Outlook 2007作為IMAP客戶端,以便存取GMail上的郵件。

但是設定過程並不容易,尤其是企業用戶,想要用自己的網域名稱來使用GMail,會遭遇到許多問題。

以下我特別錄製了一段動畫,示範如何用Outlook來收GMail,特別是自己網域的方法。

 

解決方法

1. 首先GMail帳號,須啟用IMAP,首先點擊GMail介面右上角的「郵件設定」。

20110715-04-GMail

2. 再點擊「轉寄和POP/IMAP」,點選「啟用IMAP」,最後「儲存變更」。

20110715-05-GMail

3. 進入Outlook 2007的郵件帳號設定

Outlook 2007 設定 GMail 帳號

 

參考網址

http://mail.google.com/support/bin/answer.py?hl=zh-TW&ctx=mail&answer=75726

http://mail.google.com/support/bin/answer.py?answer=77689

SharePoint VisioGraphicService: “The Unattended Service Account Application ID is not specified or has an invalid value.”

說明

安裝完SharePoint Server 2010時,系統出現了以下的警告訊息

20110714-01-SharePoint

點選之後,出現了來自「VisioGraphicsService」的錯誤訊息:「The Unattended Service Account Application ID is not specified or has an invalid value.」

20110714-02-SharePoint

點擊之後,系統告訴我們需要設定「Unattended Service Account」的「Application ID」。

20110714-03-SharePoint

 

解決方法

1. 到「Central Administration / Application Management / Manage service applications」。

20110714-04-SharePoint

2. 再點擊「Visio Graphics Service」。

20110714-05-SharePoint

3. 再點擊「Global Settings」。

20110714-06-SharePoint

4. 出現以下畫面,其中「Application ID」便是引發警告之原因。

20110714-07-SharePoint

5. 回到第2步驟的頁面,點擊「Secure Store Service」,以便新增「Secure Store Target Application」。

20110714-08-SharePoint

6. 若未有任何Key,則點擊「Generate New Key」。

20110714-09-SharePoint

7. 輸入Pass Phrase,以便產生新的Key。

20110714-10-SharePoint

8. 現在可以建立新的Secure Store Target Application了。

20110714-11-SharePoint

9. 紅色區塊皆需輸入資料,「Target Application Type」則需選擇「Group」。

20110714-12-SharePoint

10. 直接選擇下一步。

20110714-13-SharePoint

11. 選擇管理人員後,點擊「OK」。

20110714-14-SharePoint

12. 完成後,出現以下畫面,其中紅色色塊部份為您剛剛設定的Application ID。

20110714-15-SharePoint

13. 回到步驟4的畫面,現在把剛剛的Application ID輸入就大功告成囉。

20110714-16-SharePoint

 

參考網址

http://social.msdn.microsoft.com/Forums/en/sharepoint2010general/thread/559f72a4-d9ca-4004-b5ca-a0fa6dbad51f

SharePoint: “An error has occurred in the claim providers configured from this site collection.”

說明

在SharePoint中,選擇人員畫面出現了以下的畫面

20110715-01-SharePoint

此時,原因通常是因為您使用了外部網址來連結到Central Administration的網站。

 

解決方法

1. 到「Central Administration / System Settings / Configure alternate access mappings

20110715-02-SharePoint

2. 若沒有紅色色塊中的資料,則再點擊「Add Internal URLs

20110715-03-SharePoint

3. 之後使用新增的Internal URLs來存取網站即可。

 

參考網址

http://www.mstechblogs.com/sharepoint/en/an-error-has-occurred-in-the-claim-providers-sharepoint2010/

Windows – 清除DNS的緩衝區

說明

在Windows中,如果我們在DNS Server上修改了一筆DNS記錄

(例如將指到test的PTR記錄從192.168.1.2改為192.168.1.10)

但是在客戶端上,test仍然會是原來的192.168.1.2

(因為客戶端上的DNS Client尚未重新取得這筆資料)

此時,我們可以利用「ipconfig」的功能,來將客戶端電腦上的DNS記錄清除。

 

解決方法

1. 啟動命令列視窗 (「執行 / cmd」)

2. 輸入以下指令

C:\>ipconfig /flushdns

此指令會將DNS Client服務中儲存之DNS記錄清除;也就是說,當您提出要連到test這台電腦時,DNS Client會重新詢問DNS Server關於test的DNS記錄。

如此一來,就不會再連到不正確的位址了。

20110714

TeraStation Pro II - 加入Windows 2008 R2 Active Directory

說明

Buffalo TeraStation Pro II是我買的第一台NAS。當初花了不少銀子買下它,是很值得的投資。雖然隨著3C產品的突飛猛進,它的1.5T容量,現在抵不過一顆2T的硬碟;優點只剩下RAID5和網路存取,但是,它仍然是我備份資料的最佳夥伴。

20110713-01-TeraStation Pro II-Watermark

最近,個人試著想將它加入Windows Server 2008 R2的Active Directory中,不過一直遇到無法連線的狀況,所以特別寫了這一篇,來解決將TeraStation加入AD中的問題。

 

解決方法

1. 先登入TeraStation的後端管理頁面

20110713-02-TeraStation Pro II

預設登入帳號是「admin」

2. 提供一組固定IP給TeraStation。進入「Network / IP Address Properties」,然後將「Automatic via DHCP」設為「Disable」,並輸入專屬之固定IP。

20110713-03-TeraStation Pro II

3. 將TeraStation加入Active Directory。進入「Network / Workgroup/Domain」,然後將AD相關資料輸入。其中用戶名稱和密碼,必須輸入具AD管理權限之帳號。

20110713-04-TeraStation Pro II

此處建議加入WINS SERVER IP位址。

4. 再來最麻煩的部份,就是要進「Shared Folders」中,將每個會使用到的AD群組或帳號設定相關讀取或寫入之權限。

我們要先選擇群組(或使用者),然後點選「Read Only」的加入按鈕,則群組(或使用者)才有讀取權限。

再來要選擇在「Read Only」中的群組(或使用者),然後點選「Read/Write」的加入按鈕,則群組(或使用者)才有讀取、寫入權限。

20110713-05-TeraStation Pro II

5. 完成。

20110712

進行需要重建資料表的動作

 

說明

SQL Server 2008 R2Management Studio中,當我們進行需要重建資料表的動作之時 (如將原有資料表之PK屬性改為「Is Identity」)

20110711-05-進行需要重建資料表的動作-Watermark

正想儲存的時候,會出現以下對話框,告訴我們無法儲存……

20110711-06-進行需要重建資料表的動作-Watermark

這個保護機制很好,可防止我們無意間把重要的資料表重建 (可能會喪失資料)。但是若我們真的想進行重建,卻又被此保護機制給擋住。

 

解決方法

1. 在Management Studio中,點選「Tools / Options」。

20110711-07-進行需要重建資料表的動作-Watermark

2. 選取「Designers / Table and Database Designers」,並取消勾選「Prevent saving changes that require table re-creation」,即可取消保護機制。

20110711-08-進行需要重建資料表的動作-Watermark

3. 按下確認後,即可回到Management Studio進行想要的動作。

4. 收工。

 

參考網址

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

20110711

在AD中刪除受保護的OU

說明


在Windows Server 2008 R2中,當我們在新增OU時,會有一個特別的選項「防止容器被意外刪除」……
20110711-01-防止容器被意外刪除-Watermark
當我們想要刪除的時候,會出現以下對話框,告訴我們無法刪除此OU……
20110711-02-無法刪除OU-Watermark
這個機制很好,可防止我們無意間把重要的OU刪除。但若我們真的想要刪除的時候,卻又讓人氣得牙癢癢的。

 


解決方法


1. 在AD的MMC中,點選「View / Advanced Features」 (中文版應該是「檢視 / 顯示進階選項」)。
20110711-03-顯示進階選項-Watermark
2. 如此一來,本來在OU屬性中未出現的選項「防止容器被意外刪除」便會出現;在此取消勾選,即可取消保護機制。
20110711-04-取消防止意外刪除-Watermark
3. 按下確認後,便可刪除此OU。
4. 收工。

20110709

CO2排放當量

490公斤CO2 = 770度電

7公斤CO2 = 11度電 (個人建議:想成7-11比較好記)

1度電 = 0.636363...公斤CO2

20110702

GnuCash – 安裝即時報價模組

說明

在Windows版的GnuCash中,當我們剛安裝完的時候,預設是沒有證券的「即時報價模組」 (因為Windows並未內建Perl)。使用即時報價的時候,GnuCash即會告訴我們要安裝「Finance::Quote」。

20110701-1-GnuCash-取得線上報價

(若未安裝即時報價模組的話,上圖的「取得線上報價」的選項是無法勾選的)

 

為了讓記帳時可以順便計算目前手頭上股票的現額,所以我們必須安裝即時報價模組。

 

但是安裝之前,我們必須先安裝Perl。

 

目前Windows上可用的Perl安裝檔有二種→

1. ActivePerl

2. Strawberry Perl

 

網路上二方各有支持者,我個人是比較偏向Strawberry Perl,但是GnuCash的安裝提示中使用的是ActivePerl。所以我們還是來安裝Active Perl吧。(請參考「Perl-ActivePerl安裝」)

 

Perl安裝完成之後,我們要在GnuCash目錄下的「bin」資料夾開啟命令列視窗。

20110701-3-GnuCash安裝即時報價模組-Watermark

在命令列中,輸入「install-fq-mods.cmd」,即可進行自動安裝。

 

安裝完成後,重啟GnuCash,就可以使用即時報價了。

 

參考

Finance::Quote Problems with Windows (VISTA 32-Bit SP1)

Perl – ActivePerl安裝

說明

Windows預設是不會安裝Perl的,所以我們需要一個Perl的整合安裝包。

 

目前Windows上可用的Perl安裝檔有二種→

1. ActivePerl

2. Strawberry Perl

在網路上雙方各有支持者,不過,我們今天介紹如何安裝ActivePerl。

 

步驟

1. 首先進入到下載頁
 20110701-2-ActivePerl下載頁

2. 選擇好要下載的版本,下載完成後進行安裝。
20110701-2-ActivePerl安裝 

3. 直接以預設值安裝即可。

4. 安裝完成後重新開機,即可開始使用Perl。

 

參考

ActivePerl

20110701

淨空法師開示-盡棄平生所學,專尋淨土教門

引用:地藏菩薩本願經講記(第三十四卷) 淨空法師主講 新加坡淨宗學會錄影室

如果自己沒有這個能力,自己確確實實是個生死業障的凡夫,那就要記住大師在此地的教訓,小註第二行,末後這一句所說,「自是盡棄平生所學,專尋淨土教門。十餘年來,未嘗暫捨」,這就是求自度。這是個學佛的人,平生所學廣學多聞,這時候真正覺悟、真正明白了,曉得你所修學的那些法門,到臨命終時都派不上用場,你要覺悟得早,把你所修學的統統捨棄,專修淨土求願往生。