2011年10月20日 星期四

關於架構 ...

剛跟朋友討論架構是否重要
記錄一下內容 ..

P:

你會不會覺得 我們太強調架構
東西有寫出來 可以跑 不會錯就好

B:
是這樣說沒錯  
東西要能跑  跑出來符合預期的 是最重要的
我自己覺得啦   架構就有點像作文大綱
如果熟悉某個大綱模式  像是 起承轉合
這樣在寫作的過程中  可以比較明確的知道  每個段落要寫啥
而不是想到啥  就填啥

P:
整個文章 要看懂你的目的 必須整篇看完
之後要修改也是

B:
段落分明  有層次  看的人也懂得快
寫的人  也不用想說該怎麼表達 或忘了該表達的
而且既然是大綱  寫的時候可以保持彈性的
重點還是需求  



2011年7月15日 星期五

Windows Service : 如何對已經安裝的Service 修改登入帳號/密碼 ( 3 )

3. Coding, 使用WMI更改特定服務的帳號密碼。
使用WMI也可以修改Service的資訊
關於WMI的資訊 可以參考這裡

我們使用C#來建立相關的code。
開啟專案後,要先加入必要的Reference。
System.Management

















再來加入using ~







最後就是相關的code了












這裡有幾個注意的要點:

  1. 路徑的格式:
    • Win32_Service.Name=MyServiceName
  2. 使用ManagementObject 與 ManagementPath 獲得該Service。
  3. 建立大小為10的 object 陣列,做為傳入的參數。
  4. 設定矩陣的第6、第7個,分別為user name 與 password。
  5. 使用InvokeMethod,呼叫"Change" method,並且傳入參數。

如此即可改變Windows Service相關的資訊了
更多的參考 可以看這裡

Windows Service : 如何對已經安裝的Service 修改登入帳號/密碼 ( 2 )

2. 在Visual Studio Command 直接下sc指令。
接下來是進階版的修改方式
直接在Visual Studio Command 下sc指令


首先,開啟Visual Studio Command,
(如果是用Win7,記得要用管理者權限開啟。)
接著輸入 "sc"。
可以看到關於sc的相關說明,
而其中的 config參數,是我們要的。
















關於config參數,
我們可以看到它可以修改Service的基本資訊,
其中就包括我們所需要的帳號/密碼。














按照說明:
輸入 sc config MyServiceName password= NewPassword
記得!! "= "   等號後面要空一格,否則會失敗。
至於成功的畫面,留給大家囉 ~

Windows Service : 如何對已經安裝的Service 修改登入帳號/密碼 (1)

之前工作遇到一個需求
客戶為了資安需求  會定期的更新主機的密碼
而公司的Service 會在密碼變更後 無法啟用
原因在於 當初安裝Service的帳號/密碼 是根據特定user
而非直接使用 Local Service等預設帳號

知道了問題 就開始尋找解決方案
有三種解決方式

  1. 直接到控制台的"服務" 修改密碼。
  2. 在Visual Studio Command 直接下sc指令。
  3. Coding, 使用WMI更改特定服務的帳號密碼。



1. 直接到控制台的"服務" 修改密碼。
路徑:開始 -> 控制台 -> 系統及安全性 -> 系統管理工具 -> 服務
開啟後如下:



選取要修改的服務 按滑鼠右鍵 選擇內容

選擇"登入",修改帳密,選擇確定,完成了 ~

















這算是最簡單的修改方式囉 ~
至於 上圖"帳號"旁邊的瀏覽
可以讓我們直接選擇系統有的帳號
這邊就不詳述了
有需要的話 下次再說 ~

2011年7月14日 星期四

Windows Service : 權限基本觀念

Windows Service撰寫好後 常會遇到一個問題
究竟要開給新出爐的Service 什麼權限
各個權限的差別  又在哪

MSDN上有對 Windows Service權限的說明
簡單的說
Windows Service對於權限有兩種定義:
  1. Service account permissions:
    • 該Service 根據登入帳號的權限,可以使用的電腦資源。
  2. Services permissions
    • 根據不同的 user or group,提供不同的操作權限。
簡單的說,
前者是決定Service能做哪些事情;後者是決定哪些人能對Service做操作。

Service account
有四種類型:
  1. Local System:
    • powerful account,具有系統的完整存取權限。
    • 權限範圍包括網域控制站上的目錄服務(directory service)。
  2. Local Service:
    • 類似 user account,是一個特別的內建帳戶。
    • 具有與 [Users] 群組相同等級的資源及物件存取權。
    • 作為 此帳戶執行的服務,會以不含認證的 null session 來存取網路資源。
  3. Network Service
    • 前兩項與Local Service相同
    • 作為此帳戶執行的服務,會使用電腦帳戶的認證來存取網路資源。
  4. User Account
    • 所有的權限( 網路使用權限、資料夾使用權限 ... 等),都與該帳號相同。

Services permissions
這權限就複雜多了,
簡單的說,Services permissions是針對哪些user 或是哪些 group,
可以對Service做哪些操作。
這些操作包括Service的 啟動、停止、查詢Service資訊、更改Service資訊 ... 等。





2011年7月6日 星期三

使用SQL 2008 SQL Server Management Studio 更改資料表結構 出現錯誤訊息不允許儲存變更

今天在修改SQL Server欄位資料時
跳出了這個錯誤
不允許儲存變更。 您所做的變更會需要下列資料表卸除並重新建立。 您有做任何變更一個資料表,無法重新建立或啟用選項會防止儲存變更,需要重新建立資料表。
可以用下列的方式來修改
請參考這裡

2011年7月1日 星期五

ServiceAccount設定

ServiceAccount設定為 ServiceAccount.User時

在安裝的過程中會要求帳號密碼
記得帳號需要加上電腦的名稱
ComputerName \ UserName

可參考 這裡

效能計數器登錄區已損毀 windows7

安裝MS SQLServer 2008時出現了這個問題
上網查了一下
發現要改註冊碼
可以參考 這裡 來做修正
這幾天安裝程式還真累人 ...

2011年6月28日 星期二

抓取檔案目前的權限狀態

因為要設定檔案的權限
而且不想改變該檔其他帳號的權限
所以用了下方的方式去抓取 以及設定


        private static void SetAccessRule(
            string fileName
            , string accountName
            , FileSystemRights rights
            , AccessControlType controlType)
        {
            var account
                = new NTAccount(accountName);

            var accessRule
                = new FileSystemAccessRule(account, rights, controlType);

            var securityDescriptor
                = new FileSecurity(fileName, AccessControlSections.Access);
         
            var accessRuleCollection
                = securityDescriptor.GetAccessRules(true, true, typeof(NTAccount));
         
            securityDescriptor.SetAccessRule(accessRule);

            File.SetAccessControl(fileName, securityDescriptor);

        }

2011年6月27日 星期一

installutil.exe - Win 7下注意事項

因為win7的權限控管
所以在使用installutil 時
記得要先用 Adminstrator 的角色 開啟 Visual Studio的 command 工具列
否則會一直收到 system.security.securityexception the source was not found ... 的 Exception

2011年6月16日 星期四

Recursive queries

在PTT的CSherp板看到的問題
沒遇到這種需求
記錄一下 晚點來看看

reference:

SQL Server:
http://www.mssqltips.com/tip.asp?tip=938

Oracle:
http://rwijk.blogspot.com/2009/11/recursive-subquery-factoring.html

2011年6月9日 星期四

關於private / protect 方法是否該測試

如果該方法是很重要的
是可以用Reflection的方法去做

http://www.cnblogs.com/confach/articles/225502.html


visual studio 2010似乎有提供方法可以測試
晚點來試試看

http://msdn.microsoft.com/zh-tw/library/bb385974.aspx

2011年1月12日 星期三

Block UI

Asp.NET也有提供BLOCK UI的模組!
http://www.dotblogs.com.tw/hatelove/archive/2009/10/02/10888.aspx

2011年1月7日 星期五

Oracle 字串長度

Oracleutf8環境中紀錄中文為3byte,英文和數字為1byte
可以使用LENGTHB這個函數查看某個欄位所佔的byte數。

程式可以使用System.Text.Encoding.GetEncoding("big5").GetByteCount("中文字串ABC");
來計算字串的byte數。

2011年1月6日 星期四

尋找 Asp.Net 的checkbox 值

利用javascript 尋找 Asp.Net 的checkbox 值
以下是判定 該checkbok的項目 是否有任一被選取


            var isSelected = false;

            $("#<%=CheckBoxList_Floor.ClientID %> :checkbox").each(function() {
                if ($(this).attr("checked"))
                    isSelected = $(this).attr("checked") || isSelected;
            });

2011年1月4日 星期二

Javascript 的 Date

javascript的Date 在初始化時 月份的數字要減一
月份是從 0 ~ 11
例如要設定 2011年 1月 1號

var dt = new Date(2011, 1, 1);
這會出現的是二月

正確版本是
var dt = new Date(2011, 0, 1);