程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#控制管理VisualSVN Server,

C#控制管理VisualSVN Server,

編輯:C#入門知識

C#控制管理VisualSVN Server,


VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation)。 VisualSVN Server安裝的計算機中,位於%VISUALSVN_SERVER%\WMI下的MOF文件描述了該接口。可以用C#代碼控制管理VisualSVN Server。

我機器VisualSVN安裝在D盤,MOF文件存在位置:D:\Program Files\VisualSVN Server\WMI\VisualSVNServer.mof

下面一些代碼供參考:

 

[csharp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. using System.Management;  
  2. using System.Management.Instrumentation;  


並添加 System.Management,System.Management.Instrumentation這兩個組件的引用。

 

1)創建Subversion 用戶 'user1',密碼為'secret'

 

[csharp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. ManagementClass userClass = newManagementClass("root\\VisualSVN","VisualSVN_User",null);  
  2. // Obtain in-parameters for the method  
  3. ManagementBaseObject inParams =  
  4. userClass.GetMethodParameters("Create");  
  5. // Add the input parameters.  
  6. inParams["Name"] = "user1";  
  7. inParams["Password"] = "secret";  
  8. // Execute the method and obtain the return values.  
  9. ManagementBaseObject outParams =  
  10. userClass.InvokeMethod("Create", inParams, null);  


2)創建新的repository 'Repo1'

 

 

[csharp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. ManagementClass repoClass = newManagementClass("root\\VisualSVN","VisualSVN_Repository",null);  
  2. // Obtain in-parameters for the method  
  3. ManagementBaseObject inParams =  
  4. repoClass.GetMethodParameters("Create");  
  5. // Add the input parameters.  
  6. inParams["Name"] = "Repo1";  
  7. // Execute the method and obtain the return values.  
  8. ManagementBaseObject outParams =  
  9. repoClass.InvokeMethod("Create", inParams, null);  

 

  3)設置SID S-1-5-32-545 ('BUILTIN\Users') Windows用戶組對'Test' repository的讀/寫權限. FYI: AccessLevel 值在MOF有描述: "0 - 無權限, 1 - 只讀, 2 - 讀/寫". [csharp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. ManagementClass userClass = newManagementClass("root\\VisualSVN","VisualSVN_WindowsAccount",null);  
  2. ManagementClass authzClass = newManagementClass("root\\VisualSVN","VisualSVN_SecurityDescriptor",null);  
  3. ManagementClass permClass = newManagementClass("root\\VisualSVN","VisualSVN_PermissionEntry",null);  
  4. ManagementObject userObject = userClass.CreateInstance();  
  5. userObject.SetPropertyValue("SID","S-1-5-32-545");  
  6. ManagementObject permObject = permClass.CreateInstance();  
  7. permObject.SetPropertyValue("Account", userObject);  
  8. permObject.SetPropertyValue("AccessLevel", 2);  
  9. ManagementObject repo = newManagementObject("VisualSVN_Repository.Name='Test'");  
  10. ManagementBaseObject inParams =  
  11. authzClass.GetMethodParameters("SetSecurity");  
  12. inParams["Object"] = repo;  
  13. inParams["Permissions"] = newobject[] { permObject };  
  14. ManagementBaseObject outParams =  
  15. authzClass.InvokeMethod("SetSecurity", inParams, null);  
封裝後的Helper類: [csharp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Management;//調用windows WMI需引入此類庫  
  5.   
  6. namespace Whir.Software.InteralServerManage.SVNManager  
  7. {  
  8.     /// <summary>  
  9.     ///     Visual SVN 操作輔助類:使用WMI控制VisualSVN,MOF文件存在位置:C:\Program Files\VisualSVN Server\WMI\VisualSVNServer.mof  
  10.     /// </summary>  
  11.     public class SVNHelper  
  12.     {  
  13.         #region 設置  
  14.  
  15.         #region 設置倉庫權限  
  16.   
  17.         public enum AccessLevel : uint  
  18.         {  
  19.             NoAccess = 0,  
  20.             ReadOnly,  
  21.             ReadWrite  
  22.         }  
  23.   
  24.         /// <summary>  
  25.         ///     設置倉庫權限(給用戶授權)  
  26.         /// </summary>  
  27.         /// <param name="userName">用戶名</param>  
  28.         /// <param name="repository">SVN倉庫</param>  
  29.         public static bool SetRepositoryPermission(string userName, string repository)  
  30.         {  
  31.             return SetRepositoryPermission(userName, repository, 2);  
  32.         }  
  33.   
  34.         /// <summary>  
  35.         ///     設置倉庫權限(給用戶授權)  
  36.         /// </summary>  
  37.         /// <param name="users">用戶名</param>  
  38.         /// <param name="repository">SVN倉庫</param>  
  39.         public static bool SetRepositoryPermission(List<string> users, string repository)  
  40.         {  
  41.             string userNames = "";  
  42.             foreach (string user in users)  
  43.             {  
  44.                 userNames += user + ",";  
  45.             }  
  46.             return SetRepositoryPermission(userNames, repository, 2);  
  47.         }  
  48.   
  49.         /// <summary>  
  50.         ///     設置倉庫權限(給用戶授權)  
  51.         /// </summary>  
  52.         /// <param name="userName">用戶名</param>  
  53.         /// <param name="repository">SVN倉庫</param>  
  54.         /// <param name="permission"> 權限碼:0拒絕,1只讀,2讀寫</param>  
  55.         public static bool SetRepositoryPermission(string userName, string repository, int permission)  
  56.         {  
  57.             try  
  58.             {  
  59.                 string[] users = userName.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries);  
  60.                 IDictionary<string, AccessLevel> permissions = GetPermissions(repository, "/");  
  61.                 foreach (string s in users)  
  62.                 {  
  63.                     if (!permissions.ContainsKey(s))  
  64.                     {  
  65.                         permissions.Add(s, AccessLevel.ReadWrite);  
  66.                     }  
  67.                 }  
  68.                 SetPermissions(repository, "/", permissions);  
  69.                 return true;  
  70.             }  
  71.             catch (Exception)  
  72.             {  
  73.                 return false;  
  74.             }  
  75.         }  
  76.   
  77.         /// <summary>  
  78.         ///     根據倉庫名取得倉庫實體  
  79.         /// </summary>  
  80.         /// <param name="name"></param>  
  81.         /// <returns></returns>  
  82.         private static ManagementObject GetRepositoryObject(string name)  
  83.         {  
  84.             return new ManagementObject("root\\VisualSVN", string.Format("VisualSVN_Repository.Name='{0}'", name), null);  
  85.         }  
  86.   
  87.         /// <summary>  
  88.         ///     讀取權限實體  
  89.         /// </summary>  
  90.         /// <param name="sid"></param>  
  91.         /// <param name="accessLevel"></param>  
  92.         /// <returns></returns>  
  93.         private static ManagementObject GetPermissionObject(string sid, AccessLevel accessLevel)  
  94.         {  
  95.             var accountClass = new ManagementClass("root\\VisualSVN",  
  96.                                                    "VisualSVN_WindowsAccount", null);  
  97.             var entryClass = new ManagementClass("root\\VisualSVN",  
  98.                                                  "VisualSVN_PermissionEntry", null);  
  99.             ManagementObject account = accountClass.CreateInstance();  
  100.             if (account != null) account["SID"] = sid;  
  101.             ManagementObject entry = entryClass.CreateInstance();  
  102.             if (entry != null)  
  103.             {  
  104.                 entry["AccessLevel"] = accessLevel;  
  105.                 entry["Account"] = account;  
  106.                 return entry;  
  107.             }  
  108.             return null;  
  109.         }  
  110.   
  111.         /// <summary>  
  112.         ///     設置倉庫權限  
  113.         /// </summary>  
  114.         /// <param name="repositoryName"></param>  
  115.         /// <param name="path"></param>  
  116.         /// <param name="permissions"></param>  
  117.         private static void SetPermissions(string repositoryName, string path,  
  118.                                            IEnumerable<KeyValuePair<string, AccessLevel>> permissions)  
  119.         {  
  120.             ManagementObject repository = GetRepositoryObject(repositoryName);  
  121.             ManagementBaseObject inParameters = repository.GetMethodParameters("SetSecurity");  
  122.             inParameters["Path"] = path;  
  123.             IEnumerable<ManagementObject> permissionObjects =  
  124.                 permissions.Select(p => GetPermissionObject(p.Key, p.Value));  
  125.             inParameters["Permissions"] = permissionObjects.ToArray();  
  126.             repository.InvokeMethod("SetSecurity", inParameters, null);  
  127.         }  
  128.   
  129.         /// <summary>  
  130.         ///     讀取倉庫權限  
  131.         /// </summary>  
  132.         /// <param name="repositoryName"></param>  
  133.         /// <param name="path"></param>  
  134.         /// <returns></returns>  
  135.         private static IDictionary<string, AccessLevel> GetPermissions(string repositoryName, string path)  
  136.         {  
  137.             ManagementObject repository = GetRepositoryObject(repositoryName);  
  138.             ManagementBaseObject inParameters = repository.GetMethodParameters("GetSecurity");  
  139.             inParameters["Path"] = path;  
  140.             ManagementBaseObject outParameters = repository.InvokeMethod("GetSecurity", inParameters, null);  
  141.   
  142.             var permissions = new Dictionary<string, AccessLevel>();  
  143.   
  144.             if (outParameters != null)  
  145.                 foreach (ManagementBaseObject p in (ManagementBaseObject[]) outParameters["Permissions"])  
  146.                 {  
  147.                     // NOTE: This will fail if VisualSVN Server is configured to use Subversion  
  148.                     // authentication.  In that case you'd probably want to check if the account  
  149.                     // is a VisualSVN_WindowsAccount or a VisualSVN_SubversionAccount instance  
  150.                     // and tweak the property name accordingly.   
  151.                     var account = (ManagementBaseObject) p["Account"];  
  152.                     var sid = (string) account["SID"];  
  153.                     var accessLevel = (AccessLevel) p["AccessLevel"];  
  154.   
  155.                     permissions[sid] = accessLevel;  
  156.                 }  
  157.   
  158.             return permissions;  
  159.         }  
  160.  
  161.         #endregion  
  162.  
  163.         #region 創建用戶組  
  164.   
  165.         /// <summary>  
  166.         ///     創建用戶組  
  167.         /// </summary>  
  168.         public static bool CreatGroup(string groupName)  
  169.         {  
  170.             try  
  171.             {  
  172.                 var svn = new ManagementClass("root\\VisualSVN", "VisualSVN_Group", null);  
  173.                 ManagementBaseObject @params = svn.GetMethodParameters("Create");  
  174.                 @params["Name"] = groupName.Trim();  
  175.                 @params["Members"] = new object[] {};  
  176.                 svn.InvokeMethod("Create", @params, null);  
  177.                 return true;  
  178.             }  
  179.             catch (Exception)  
  180.             {  
  181.                 return false;  
  182.             }  
  183.         }  
  184.  
  185.         #endregion  
  186.  
  187.         #region 創建用戶  
  188.   
  189.         /// <summary>  
  190.         ///     創建用戶  
  191.         /// </summary>  
  192.         /// <param name="userName"></param>  
  193.         /// <param name="password"></param>  
  194.         /// <returns></returns>  
  195.         public static bool CreateUser(string userName, string password)  
  196.         {  
  197.             try  
  198.             {  
  199.                 var svn = new ManagementClass("root\\VisualSVN", "VisualSVN_User", null);  
  200.                 ManagementBaseObject @params = svn.GetMethodParameters("Create");  
  201.                 @params["Name"] = userName.Trim();  
  202.                 @params["Password"] = password.Trim();  
  203.                 svn.InvokeMethod("Create", @params, null);  
  204.                 return true;  
  205.             }  
  206.             catch (Exception)  
  207.             {  
  208.                 return false;  
  209.             }  
  210.         }  
  211.  
  212.         #endregion  
  213.  
  214.         #region  創建svn倉庫  
  215.   
  216.         /// <summary>  
  217.         ///     創建svn倉庫  
  218.         /// </summary>  
  219.         /// <param name="name"></param>  
  220.         /// <returns></returns>  
  221.         public static bool CreateRepository(string name)  
  222.         {  
  223.             try  
  224.             {  
  225.                 var svn = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null);  
  226.                 ManagementBaseObject @params = svn.GetMethodParameters("Create"); //創建方法參數引用  
  227.                 @params["Name"] = name.Trim(); //傳入參數  
  228.                 svn.InvokeMethod("Create", @params, null); //執行  
  229.                 return true;  
  230.             }  
  231.             catch (Exception)  
  232.             {  
  233.                 return false;  
  234.             }  
  235.         }  
  236.  
  237.         #endregion  
  238.  
  239.         #region  創建svn倉庫目錄  
  240.   
  241.         /// <summary>  
  242.         ///     創建svn倉庫目錄  
  243.         /// </summary>  
  244.         /// <param name="repositories"> </param>  
  245.         /// <param name="name"></param>  
  246.         /// <returns></returns>  
  247.         public static bool CreateRepositoryFolders(string repositories, string[] name)  
  248.         {  
  249.             try  
  250.             {  
  251.                 var repository = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null);  
  252.                 ManagementObject repoObject = repository.CreateInstance();  
  253.                 if (repoObject != null)  
  254.                 {  
  255.                     repoObject.SetPropertyValue("Name", repositories);  
  256.                     ManagementBaseObject inParams = repository.GetMethodParameters("CreateFolders");  
  257.                     inParams["Folders"] = name;  
  258.                     inParams["Message"] = "";  
  259.                     repoObject.InvokeMethod("CreateFolders", inParams, null);  
  260.                 }  
  261.                 return true;  
  262.             }  
  263.             catch (Exception)  
  264.             {  
  265.                 return false;  
  266.             }  
  267.         }  
  268.  
  269.         #endregion  
  270.   
  271.         //public static bool SetMemberGroup(string userName, string groupName)  
  272.         //{  
  273.         //    try  
  274.         //    {  
  275.         //        var userObj = GetGroupUsersArr(groupName);  
  276.         //        foreach (ManagementBaseObject baseObject in userObj)  
  277.         //        {  
  278.         //            if (baseObject["Name"].ToString().ToLower() == userName)  
  279.         //            {  
  280.         //                return false;  
  281.         //            }  
  282.         //        }  
  283.         //        var addUser = new ManagementClass("root\\VisualSVN", "VisualSVN_SubversionAccount", null).CreateInstance();  
  284.         //        if (addUser != null)  
  285.         //        {  
  286.         //            addUser.SetPropertyValue("Name", userName);  
  287.         //            userObj.Add(addUser);  
  288.         //        }  
  289.   
  290.         //        var svnUser = new ManagementClass("root\\VisualSVN", "VisualSVN_Group", null);  
  291.         //        ManagementBaseObject inParams = svnUser.GetMethodParameters("SetMembers");  
  292.         //        inParams["Members"] = new object[] { userObj };  
  293.         //        svnUser.InvokeMethod("SetMembers", inParams, null);  
  294.         //        return true;  
  295.         //    }  
  296.         //    catch (Exception)  
  297.         //    {  
  298.         //        return false;  
  299.         //    }  
  300.         //}  
  301.  
  302.         #endregion  
  303.  
  304.         #region 讀取  
  305.   
  306.         /// <summary>  
  307.         ///     讀取指定組裡的用戶  
  308.         /// </summary>  
  309.         /// <param name="groupName"></param>  
  310.         /// <returns></returns>  
  311.         public static List<string> GetGroupUsers(string groupName)  
  312.         {  
  313.             var listUsers = new List<string>();  
  314.             var group = new ManagementClass("root\\VisualSVN", "VisualSVN_Group", null);  
  315.             ManagementObject instance = group.CreateInstance();  
  316.             if (instance != null)  
  317.             {  
  318.                 instance.SetPropertyValue("Name", groupName.Trim());  
  319.                 ManagementBaseObject outParams = instance.InvokeMethod("GetMembers", null, null); //通過實例來調用方法  
  320.                 if (outParams != null)  
  321.                 {  
  322.                     var members = outParams["Members"] as ManagementBaseObject[];  
  323.                     if (members != null)  
  324.                     {  
  325.                         foreach (ManagementBaseObject member in members)  
  326.                         {  
  327.                             object name = member["Name"];  
  328.                             listUsers.Add(name.ToString());  
  329.                         }  
  330.                     }  
  331.                 }  
  332.             }  
  333.             return listUsers;  
  334.         }  
  335.   
  336.         public static List<ManagementBaseObject> GetGroupUsersArr(string groupName)  
  337.         {  
  338.             var list = new List<ManagementBaseObject>();  
  339.             var group = new ManagementClass("root\\VisualSVN", "VisualSVN_Group", null);  
  340.             ManagementObject instance = group.CreateInstance();  
  341.             if (instance != null)  
  342.             {  
  343.                 instance.SetPropertyValue("Name", groupName.Trim());  
  344.                 ManagementBaseObject outParams = instance.InvokeMethod("GetMembers", null, null); //通過實例來調用方法  
  345.                 if (outParams != null)  
  346.                 {  
  347.                     var members = outParams["Members"] as ManagementBaseObject[];  
  348.                     if (members != null)  
  349.                     {  
  350.                         foreach (ManagementBaseObject member in members)  
  351.                         {  
  352.                             list.Add(member);  
  353.                         }  
  354.                     }  
  355.                 }  
  356.             }  
  357.             return list;  
  358.         }  
  359.  
  360.         #endregion  
  361.     }  
  362. }  
  參考文章:

1.http://msdn.microsoft.com/en-us/library/bb404655

2.http://stackoverflow.com/questions/10017282/control-visualsvn-server-from-c-sharp


C:\

可以的

參考這個對C盤進行清理:
1.關閉系統還原:我的電腦屬性/系統還原/關閉所有磁盤上的系統還原,但是以後就不能用系統還原了!
2.關閉系統休眠:控制面板/電源/休眠/在啟動系統休眠前面的勾去掉
3.移動虛擬內存,我的電腦屬性/高級/性能/設置/高級/更改/選C盤也就是系統盤,選無分頁面,然後把虛擬內存設置到其磁盤,要剩余磁盤空間多的磁盤,比如D,E,F等盤. 設成內存的1.5~2.5倍,大小可設成一樣!
5.清理IE臨時文件夾,internet選項,刪除臨時文件和脫機文件
6.刪除系統日志和程序日志,我的電腦/控制面板/管理工具/計算機管理/事件查看器/應用程序,鼠標右鍵/清除所事件,在依次清除系統日志
7.清理系統緩存:2000系統是:C:\WINNT\system32\dllcache下的所有文件
XP系統是:C:\windows\system32\dllcache下的所有文件 清理系統緩存(打開我的電腦/工具/文件和文件夾選項/隱藏受保護的系統文件的勾去掉在把顯示全部文件勾上)。也可以直接運行sfc.exe /purgecache命令自動刪除。
8.清空回收站
9.刪除c:\windows\SoftwareDistribution\Download下的文件(系統更新時下載的文件如你裝好了更新也就沒有用了)
10.刪除c:\windows\RegisteredPackages下所有目錄
11.刪除C:\WINDOWS\Downloaded Program Files下所有的文件
12.我的電腦 文件夾選項 查看 隱藏已知受系統保護的文件勾去掉,顯示所有文件勾上確定。
13.刪除c:\windows\所有帶$8882305$的文件(系統更新後的備份文件)

zhidao.baidu.com/question/11035955.html
zhidao.baidu.com/question/12223613.html
zhidao.baidu.com/question/14874715.html
......余下全文>>
 

C:\

可以的

參考這個對C盤進行清理:
1.關閉系統還原:我的電腦屬性/系統還原/關閉所有磁盤上的系統還原,但是以後就不能用系統還原了!
2.關閉系統休眠:控制面板/電源/休眠/在啟動系統休眠前面的勾去掉
3.移動虛擬內存,我的電腦屬性/高級/性能/設置/高級/更改/選C盤也就是系統盤,選無分頁面,然後把虛擬內存設置到其磁盤,要剩余磁盤空間多的磁盤,比如D,E,F等盤. 設成內存的1.5~2.5倍,大小可設成一樣!
5.清理IE臨時文件夾,internet選項,刪除臨時文件和脫機文件
6.刪除系統日志和程序日志,我的電腦/控制面板/管理工具/計算機管理/事件查看器/應用程序,鼠標右鍵/清除所事件,在依次清除系統日志
7.清理系統緩存:2000系統是:C:\WINNT\system32\dllcache下的所有文件
XP系統是:C:\windows\system32\dllcache下的所有文件 清理系統緩存(打開我的電腦/工具/文件和文件夾選項/隱藏受保護的系統文件的勾去掉在把顯示全部文件勾上)。也可以直接運行sfc.exe /purgecache命令自動刪除。
8.清空回收站
9.刪除c:\windows\SoftwareDistribution\Download下的文件(系統更新時下載的文件如你裝好了更新也就沒有用了)
10.刪除c:\windows\RegisteredPackages下所有目錄
11.刪除C:\WINDOWS\Downloaded Program Files下所有的文件
12.我的電腦 文件夾選項 查看 隱藏已知受系統保護的文件勾去掉,顯示所有文件勾上確定。
13.刪除c:\windows\所有帶$8882305$的文件(系統更新後的備份文件)

zhidao.baidu.com/question/11035955.html
zhidao.baidu.com/question/12223613.html
zhidao.baidu.com/question/14874715.html
......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved