C#控制管理VisualSVN Server
生活随笔
收集整理的這篇文章主要介紹了
C#控制管理VisualSVN Server
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C#控制管理VisualSVN Server 原文:C#控制管理VisualSVN Serverusing?System.Management;?? using?System.Management.Instrumentation;?? ManagementClass?userClass?=?newManagementClass("root\\VisualSVN","VisualSVN_User",null);?? //?Obtain?in-parameters?for?the?method?? ManagementBaseObject?inParams?=?? userClass.GetMethodParameters("Create");?? //?Add?the?input?parameters.?? inParams["Name"]?=?"user1";?? inParams["Password"]?=?"secret";?? //?Execute?the?method?and?obtain?the?return?values.?? ManagementBaseObject?outParams?=?? userClass.InvokeMethod("Create",?inParams,?null);?? ManagementClass?repoClass?=?newManagementClass("root\\VisualSVN","VisualSVN_Repository",null);?? //?Obtain?in-parameters?for?the?method?? ManagementBaseObject?inParams?=?? repoClass.GetMethodParameters("Create");?? //?Add?the?input?parameters.?? inParams["Name"]?=?"Repo1";?? //?Execute?the?method?and?obtain?the?return?values.?? ManagementBaseObject?outParams?=?? repoClass.InvokeMethod("Create",?inParams,?null);??
[csharp]?view plaincopyprint? ManagementClass?userClass?=?newManagementClass("root\\VisualSVN","VisualSVN_WindowsAccount",null);?? ManagementClass?authzClass?=?newManagementClass("root\\VisualSVN","VisualSVN_SecurityDescriptor",null);?? ManagementClass?permClass?=?newManagementClass("root\\VisualSVN","VisualSVN_PermissionEntry",null);?? ManagementObject?userObject?=?userClass.CreateInstance();?? userObject.SetPropertyValue("SID","S-1-5-32-545");?? ManagementObject?permObject?=?permClass.CreateInstance();?? permObject.SetPropertyValue("Account",?userObject);?? permObject.SetPropertyValue("AccessLevel",?2);?? ManagementObject?repo?=?newManagementObject("VisualSVN_Repository.Name='Test'");?? ManagementBaseObject?inParams?=?? authzClass.GetMethodParameters("SetSecurity");?? inParams["Object"]?=?repo;?? inParams["Permissions"]?=?newobject[]?{?permObject?};?? ManagementBaseObject?outParams?=?? authzClass.InvokeMethod("SetSecurity",?inParams,?null);?? 封裝后的Helper類: [csharp]?view plaincopyprint? using?System;?? using?System.Collections.Generic;?? using?System.Linq;?? using?System.Management;//調用windows?WMI需引入此類庫?? ?? namespace?Whir.Software.InteralServerManage.SVNManager?? {?? ????///?<summary>?? ????///?????Visual?SVN?操作輔助類:使用WMI控制VisualSVN,MOF文件存在位置:C:\Program?Files\VisualSVN?Server\WMI\VisualSVNServer.mof?? ????///?</summary>?? ????public?class?SVNHelper?? ????{?? ????????#region?設置?? ? ????????#region?設置倉庫權限?? ?? ????????public?enum?AccessLevel?:?uint?? ????????{?? ????????????NoAccess?=?0,?? ????????????ReadOnly,?? ????????????ReadWrite?? ????????}?? ?? ????????///?<summary>?? ????????///?????設置倉庫權限(給用戶授權)?? ????????///?</summary>?? ????????///?<param?name="userName">用戶名</param>?? ????????///?<param?name="repository">SVN倉庫</param>?? ????????public?static?bool?SetRepositoryPermission(string?userName,?string?repository)?? ????????{?? ????????????return?SetRepositoryPermission(userName,?repository,?2);?? ????????}?? ?? ????????///?<summary>?? ????????///?????設置倉庫權限(給用戶授權)?? ????????///?</summary>?? ????????///?<param?name="users">用戶名</param>?? ????????///?<param?name="repository">SVN倉庫</param>?? ????????public?static?bool?SetRepositoryPermission(List<string>?users,?string?repository)?? ????????{?? ????????????string?userNames?=?"";?? ????????????foreach?(string?user?in?users)?? ????????????{?? ????????????????userNames?+=?user?+?",";?? ????????????}?? ????????????return?SetRepositoryPermission(userNames,?repository,?2);?? ????????}?? ?? ????????///?<summary>?? ????????///?????設置倉庫權限(給用戶授權)?? ????????///?</summary>?? ????????///?<param?name="userName">用戶名</param>?? ????????///?<param?name="repository">SVN倉庫</param>?? ????????///?<param?name="permission">?權限碼:0拒絕,1只讀,2讀寫</param>?? ????????public?static?bool?SetRepositoryPermission(string?userName,?string?repository,?int?permission)?? ????????{?? ????????????try?? ????????????{?? ????????????????string[]?users?=?userName.Split(new[]?{","},?StringSplitOptions.RemoveEmptyEntries);?? ????????????????IDictionary<string,?AccessLevel>?permissions?=?GetPermissions(repository,?"/");?? ????????????????foreach?(string?s?in?users)?? ????????????????{?? ????????????????????if?(!permissions.ContainsKey(s))?? ????????????????????{?? ????????????????????????permissions.Add(s,?AccessLevel.ReadWrite);?? ????????????????????}?? ????????????????}?? ????????????????SetPermissions(repository,?"/",?permissions);?? ????????????????return?true;?? ????????????}?? ????????????catch?(Exception)?? ????????????{?? ????????????????return?false;?? ????????????}?? ????????}?? ?? ????????///?<summary>?? ????????///?????根據倉庫名取得倉庫實體?? ????????///?</summary>?? ????????///?<param?name="name"></param>?? ????????///?<returns></returns>?? ????????private?static?ManagementObject?GetRepositoryObject(string?name)?? ????????{?? ????????????return?new?ManagementObject("root\\VisualSVN",?string.Format("VisualSVN_Repository.Name='{0}'",?name),?null);?? ????????}?? ?? ????????///?<summary>?? ????????///?????讀取權限實體?? ????????///?</summary>?? ????????///?<param?name="sid"></param>?? ????????///?<param?name="accessLevel"></param>?? ????????///?<returns></returns>?? ????????private?static?ManagementObject?GetPermissionObject(string?sid,?AccessLevel?accessLevel)?? ????????{?? ????????????var?accountClass?=?new?ManagementClass("root\\VisualSVN",?? ???????????????????????????????????????????????????"VisualSVN_WindowsAccount",?null);?? ????????????var?entryClass?=?new?ManagementClass("root\\VisualSVN",?? ?????????????????????????????????????????????????"VisualSVN_PermissionEntry",?null);?? ????????????ManagementObject?account?=?accountClass.CreateInstance();?? ????????????if?(account?!=?null)?account["SID"]?=?sid;?? ????????????ManagementObject?entry?=?entryClass.CreateInstance();?? ????????????if?(entry?!=?null)?? ????????????{?? ????????????????entry["AccessLevel"]?=?accessLevel;?? ????????????????entry["Account"]?=?account;?? ????????????????return?entry;?? ????????????}?? ????????????return?null;?? ????????}?? ?? ????????///?<summary>?? ????????///?????設置倉庫權限?? ????????///?</summary>?? ????????///?<param?name="repositoryName"></param>?? ????????///?<param?name="path"></param>?? ????????///?<param?name="permissions"></param>?? ????????private?static?void?SetPermissions(string?repositoryName,?string?path,?? ???????????????????????????????????????????IEnumerable<KeyValuePair<string,?AccessLevel>>?permissions)?? ????????{?? ????????????ManagementObject?repository?=?GetRepositoryObject(repositoryName);?? ????????????ManagementBaseObject?inParameters?=?repository.GetMethodParameters("SetSecurity");?? ????????????inParameters["Path"]?=?path;?? ????????????IEnumerable<ManagementObject>?permissionObjects?=?? ????????????????permissions.Select(p?=>?GetPermissionObject(p.Key,?p.Value));?? ????????????inParameters["Permissions"]?=?permissionObjects.ToArray();?? ????????????repository.InvokeMethod("SetSecurity",?inParameters,?null);?? ????????}?? ?? ????????///?<summary>?? ????????///?????讀取倉庫權限?? ????????///?</summary>?? ????????///?<param?name="repositoryName"></param>?? ????????///?<param?name="path"></param>?? ????????///?<returns></returns>?? ????????private?static?IDictionary<string,?AccessLevel>?GetPermissions(string?repositoryName,?string?path)?? ????????{?? ????????????ManagementObject?repository?=?GetRepositoryObject(repositoryName);?? ????????????ManagementBaseObject?inParameters?=?repository.GetMethodParameters("GetSecurity");?? ????????????inParameters["Path"]?=?path;?? ????????????ManagementBaseObject?outParameters?=?repository.InvokeMethod("GetSecurity",?inParameters,?null);?? ?? ????????????var?permissions?=?new?Dictionary<string,?AccessLevel>();?? ?? ????????????if?(outParameters?!=?null)?? ????????????????foreach?(ManagementBaseObject?p?in?(ManagementBaseObject[])?outParameters["Permissions"])?? ????????????????{?? ????????????????????//?NOTE:?This?will?fail?if?VisualSVN?Server?is?configured?to?use?Subversion?? ????????????????????//?authentication.??In?that?case?you'd?probably?want?to?check?if?the?account?? ????????????????????//?is?a?VisualSVN_WindowsAccount?or?a?VisualSVN_SubversionAccount?instance?? ????????????????????//?and?tweak?the?property?name?accordingly.??? ????????????????????var?account?=?(ManagementBaseObject)?p["Account"];?? ????????????????????var?sid?=?(string)?account["SID"];?? ????????????????????var?accessLevel?=?(AccessLevel)?p["AccessLevel"];?? ?? ????????????????????permissions[sid]?=?accessLevel;?? ????????????????}?? ?? ????????????return?permissions;?? ????????}?? ? ????????#endregion?? ? ????????#region?創建用戶組?? ?? ????????///?<summary>?? ????????///?????創建用戶組?? ????????///?</summary>?? ????????public?static?bool?CreatGroup(string?groupName)?? ????????{?? ????????????try?? ????????????{?? ????????????????var?svn?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_Group",?null);?? ????????????????ManagementBaseObject?@params?=?svn.GetMethodParameters("Create");?? ????????????????@params["Name"]?=?groupName.Trim();?? ????????????????@params["Members"]?=?new?object[]?{};?? ????????????????svn.InvokeMethod("Create",?@params,?null);?? ????????????????return?true;?? ????????????}?? ????????????catch?(Exception)?? ????????????{?? ????????????????return?false;?? ????????????}?? ????????}?? ? ????????#endregion?? ? ????????#region?創建用戶?? ?? ????????///?<summary>?? ????????///?????創建用戶?? ????????///?</summary>?? ????????///?<param?name="userName"></param>?? ????????///?<param?name="password"></param>?? ????????///?<returns></returns>?? ????????public?static?bool?CreateUser(string?userName,?string?password)?? ????????{?? ????????????try?? ????????????{?? ????????????????var?svn?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_User",?null);?? ????????????????ManagementBaseObject?@params?=?svn.GetMethodParameters("Create");?? ????????????????@params["Name"]?=?userName.Trim();?? ????????????????@params["Password"]?=?password.Trim();?? ????????????????svn.InvokeMethod("Create",?@params,?null);?? ????????????????return?true;?? ????????????}?? ????????????catch?(Exception)?? ????????????{?? ????????????????return?false;?? ????????????}?? ????????}?? ? ????????#endregion?? ? ????????#region??創建svn倉庫?? ?? ????????///?<summary>?? ????????///?????創建svn倉庫?? ????????///?</summary>?? ????????///?<param?name="name"></param>?? ????????///?<returns></returns>?? ????????public?static?bool?CreateRepository(string?name)?? ????????{?? ????????????try?? ????????????{?? ????????????????var?svn?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_Repository",?null);?? ????????????????ManagementBaseObject?@params?=?svn.GetMethodParameters("Create");?//創建方法參數引用?? ????????????????@params["Name"]?=?name.Trim();?//傳入參數?? ????????????????svn.InvokeMethod("Create",?@params,?null);?//執行?? ????????????????return?true;?? ????????????}?? ????????????catch?(Exception)?? ????????????{?? ????????????????return?false;?? ????????????}?? ????????}?? ? ????????#endregion?? ? ????????#region??創建svn倉庫目錄?? ?? ????????///?<summary>?? ????????///?????創建svn倉庫目錄?? ????????///?</summary>?? ????????///?<param?name="repositories">?</param>?? ????????///?<param?name="name"></param>?? ????????///?<returns></returns>?? ????????public?static?bool?CreateRepositoryFolders(string?repositories,?string[]?name)?? ????????{?? ????????????try?? ????????????{?? ????????????????var?repository?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_Repository",?null);?? ????????????????ManagementObject?repoObject?=?repository.CreateInstance();?? ????????????????if?(repoObject?!=?null)?? ????????????????{?? ????????????????????repoObject.SetPropertyValue("Name",?repositories);?? ????????????????????ManagementBaseObject?inParams?=?repository.GetMethodParameters("CreateFolders");?? ????????????????????inParams["Folders"]?=?name;?? ????????????????????inParams["Message"]?=?"";?? ????????????????????repoObject.InvokeMethod("CreateFolders",?inParams,?null);?? ????????????????}?? ????????????????return?true;?? ????????????}?? ????????????catch?(Exception)?? ????????????{?? ????????????????return?false;?? ????????????}?? ????????}?? ? ????????#endregion?? ?? ????????//public?static?bool?SetMemberGroup(string?userName,?string?groupName)?? ????????//{?? ????????//????try?? ????????//????{?? ????????//????????var?userObj?=?GetGroupUsersArr(groupName);?? ????????//????????foreach?(ManagementBaseObject?baseObject?in?userObj)?? ????????//????????{?? ????????//????????????if?(baseObject["Name"].ToString().ToLower()?==?userName)?? ????????//????????????{?? ????????//????????????????return?false;?? ????????//????????????}?? ????????//????????}?? ????????//????????var?addUser?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_SubversionAccount",?null).CreateInstance();?? ????????//????????if?(addUser?!=?null)?? ????????//????????{?? ????????//????????????addUser.SetPropertyValue("Name",?userName);?? ????????//????????????userObj.Add(addUser);?? ????????//????????}?? ?? ????????//????????var?svnUser?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_Group",?null);?? ????????//????????ManagementBaseObject?inParams?=?svnUser.GetMethodParameters("SetMembers");?? ????????//????????inParams["Members"]?=?new?object[]?{?userObj?};?? ????????//????????svnUser.InvokeMethod("SetMembers",?inParams,?null);?? ????????//????????return?true;?? ????????//????}?? ????????//????catch?(Exception)?? ????????//????{?? ????????//????????return?false;?? ????????//????}?? ????????//}?? ? ????????#endregion?? ? ????????#region?讀取?? ?? ????????///?<summary>?? ????????///?????讀取指定組里的用戶?? ????????///?</summary>?? ????????///?<param?name="groupName"></param>?? ????????///?<returns></returns>?? ????????public?static?List<string>?GetGroupUsers(string?groupName)?? ????????{?? ????????????var?listUsers?=?new?List<string>();?? ????????????var?group?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_Group",?null);?? ????????????ManagementObject?instance?=?group.CreateInstance();?? ????????????if?(instance?!=?null)?? ????????????{?? ????????????????instance.SetPropertyValue("Name",?groupName.Trim());?? ????????????????ManagementBaseObject?outParams?=?instance.InvokeMethod("GetMembers",?null,?null);?//通過實例來調用方法?? ????????????????if?(outParams?!=?null)?? ????????????????{?? ????????????????????var?members?=?outParams["Members"]?as?ManagementBaseObject[];?? ????????????????????if?(members?!=?null)?? ????????????????????{?? ????????????????????????foreach?(ManagementBaseObject?member?in?members)?? ????????????????????????{?? ????????????????????????????object?name?=?member["Name"];?? ????????????????????????????listUsers.Add(name.ToString());?? ????????????????????????}?? ????????????????????}?? ????????????????}?? ????????????}?? ????????????return?listUsers;?? ????????}?? ?? ????????public?static?List<ManagementBaseObject>?GetGroupUsersArr(string?groupName)?? ????????{?? ????????????var?list?=?new?List<ManagementBaseObject>();?? ????????????var?group?=?new?ManagementClass("root\\VisualSVN",?"VisualSVN_Group",?null);?? ????????????ManagementObject?instance?=?group.CreateInstance();?? ????????????if?(instance?!=?null)?? ????????????{?? ????????????????instance.SetPropertyValue("Name",?groupName.Trim());?? ????????????????ManagementBaseObject?outParams?=?instance.InvokeMethod("GetMembers",?null,?null);?//通過實例來調用方法?? ????????????????if?(outParams?!=?null)?? ????????????????{?? ????????????????????var?members?=?outParams["Members"]?as?ManagementBaseObject[];?? ????????????????????if?(members?!=?null)?? ????????????????????{?? ????????????????????????foreach?(ManagementBaseObject?member?in?members)?? ????????????????????????{?? ????????????????????????????list.Add(member);?? ????????????????????????}?? ????????????????????}?? ????????????????}?? ????????????}?? ????????????return?list;?? ????????}?? ? ????????#endregion?? ????}?? }?? 參考文章:
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?
并添加?System.Management,System.Management.Instrumentation這兩個組件的引用。
?
1)創建Subversion 用戶 'user1',密碼為'secret'
?
[csharp]?view plaincopyprint?
2)創建新的repository 'Repo1'
?
?
[csharp]?view plaincopyprint??
| ? | 3)設置SID S-1-5-32-545 ('BUILTIN\Users') Windows用戶組對'Test' repository的讀/寫權限. FYI: AccessLevel 值在MOF有描述: "0 - 無權限, 1 - 只讀, 2 - 讀/寫". |
1.http://msdn.microsoft.com/en-us/library/bb404655
2.http://stackoverflow.com/questions/10017282/control-visualsvn-server-from-c-sharp
posted on 2014-10-02 13:00 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/4004015.html
總結
以上是生活随笔為你收集整理的C#控制管理VisualSVN Server的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs实现一个简单的 HTTP静态
- 下一篇: PHP之基本语法