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
下面一些代码供参考:
- using System.Management;
- using System.Management.Instrumentation;
并添加 System.Management,System.Management.Instrumentation这两个组件的引用。
1)创建Subversion 用户 'user1',密码为'secret'
- 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);
2)创建新的repository 'Repo1'
- 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);
3)设置SID S-1-5-32-545 ('BUILTIN\Users') Windows用户组对'Test' repository的读/写权限. FYI: AccessLevel 值在MOF有描述: "0 - 无权限, 1 - 只读, 2 - 读/写". |
- 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);
- 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
- }
- }
1.http://msdn.microsoft.com/en-us/library/bb404655
2.http://stackoverflow.com/questions/10017282/control-visualsvn-server-from-c-sharp
转载于:https://www.cnblogs.com/lonelyxmas/p/4004015.html
C#控制管理VisualSVN Server相关推荐
- VisualSVN Server Enterprise 5.1.1 Crack
VisualSVN Server 提供以下主要功能. Active Directory 单点登录 允许用户使用他们当前的 Active Directory 域凭据访问 VisualSVN Server ...
- VisualSVN Server版本库搭建
VisualSVN Server版本库搭建 VisualsvnServer用途: 软件开发公司的代码是公司的核心,是公司最需要保护的文件资源,为了防止公司代码的泄露,放到公网的免费版本控制服务器商虽然 ...
- 项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】...
在第一篇文章 项目管理实践教程一.工欲善其事,必先利其器[Basic Tools]发布后,根据大家的回复,我需要向大家说明几个问题: 1.为什么要用VisualSVN Server,而不用Subver ...
- ad域管理与维护_在NAS SMB卷上使用VisualSVN Server维护代码库
VisualSVN Server[1] 是 Windows 平台上流行的 SVN 形式的代码管理工具.以下我们将介绍把 NAS SMB 卷作为 VisualSVN 代码库存储中心时会遇到的几个问题以及 ...
- VS2008源代码管理软件组合-visualSVN Server+TortoiseSVN+AnkhSvn
基于VS2008 Team开发环境的源代码版本控制需要以下软件,安装顺序没有限制,一切默认安装即可: (1) VisualSvn Server(版本控制服务器)免费开源软件. 版本号:Vi ...
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- Windows下VisualSVN Server的安装与配置方法(图文)
这篇文章主要介绍了Windows下VisualSVN Server的安装与配置方法,比较详细,需要的朋友可以参考下 VisualSVN Server是免费的,而VisualSVN是收费的.Visual ...
- VisualSVN Server的配置和使用方法 图文
VisualSVN Server是免费的,而VisualSVN是收费的.VisualSVN是SVN的客户端,和Visual Studio集成在一起, VisualSvn Server是SVN的服务器端 ...
- VisualSVN server 无法启动
以前装了VisualSVN server 在Windows xp下部署特别快捷.管理起来也特别方便,一般要求不高,需要快速建立svn的话这是一个不错的选择. 最近发现svn启动不起来了,重新安装.重启 ...
最新文章
- AMD 和 Intel 之战:CPU 哪家强?
- iOS学习资源(三)
- oracle如何启动和停止服务,CentOS启动和停止服务详解
- python windows安装readline
- JavaWeb——IOC
- 学习——java内存模型
- 回归分析常数项t值没有显著异于零怎么办_洋蜜蜂统计辅导专题:回归分析关键词统计量须知...
- 地图加载不出来坐标标识点图片
- java更新word文档目录页码
- Flume Agent 组件如何协同工作
- amd支持服务器内存,AMD专用内存为什么只能在AMD平台使用?与普通内存有什么区别?...
- 解决服务器空间满/var/lib/docker/overlay2占用很大,千万慎用 docker system prune -a清理 mongodb等数据库容器及镜像可能被删,找回恢复数据
- SQL Server事务日志分析
- STM32贪吃蛇实现
- 虚拟化查看服务器sn,linux 查看服务器sn号
- 【HTCVR】VRTK基本功能脚本说明
- Unity_导航系统
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范
- 量化交易 实战第二课 金融时间序列分析 Part 1
- Everything介绍
热门文章
- NOIP2018 赛前集训总结反思
- JZOJ 3870. 【NOIP2014八校联考第4场第1试10.19】单词检索(search)
- python 浮点数精度丢失_javascript解决小数的加减乘除精度丢失的方案
- win10win键无反应_最新Science:强烷基CH键的无定向硼化作用
- java实现图形界面输入半径求圆面积_测试开发工程师系列之Android自动化测试Appium(Python)连载(7)安卓图形界面...
- 中国邮政编码.html,全国邮政编码一览表.doc
- android动态刷新主页,Android app 页面加载统计工具
- yaml数组解析_yaml格式详解
- inner join 和 exists 效率_19条效率至少提高3倍的MySQL技巧
- [杂记]对RSA算法的数学原理的一点思考