U9_Git中ignore文件处理

  1. 背景

U9代码中有许多自动生成的文件,不需要上传Git必须BE Entity中的.target文件 .bak

文件 Enum.cs结尾的文件,还有许多 extand文件。 这些文件都不需要上传Git。

但是这些文件太多了,不可能手动加入到ignore文件中。就需要一个工具,自动生成ignore文件。

  1. 了解ignore文件的忽略规则

在.gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如:

  1. .gitignore忽略规则的优先级

在 .gitignore 文件中,每一行指定一个忽略规则,Git检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

1)从命令行中读取可用的忽略规则

2)当前目录定义的规则

3)父级目录定义的规则,依次递推

4)$GIT_DIR/info/exclude 文件中定义的规则

5)core.excludesfile中定义的全局规则

  1. 匹配语法

到9的数字,[a-z]表示匹配任意的小写字母)。
8)以叹号"!"表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。需要特别注意的是:如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起作用的。也就是说"!"开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用"!"也不会再次被包含。可以使用反斜杠进行转义。

需要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

假设我们只有过滤规则,而没有添加规则,

注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,

说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,

说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;

注意要先对bin/的父目录使用!规则,使其不被排除。

 

 

  1. 为U9创建Windows文件夹右击菜单

    1. 目的

在文件夹上右击,弹出菜单,点击为U9生成gitignore文件的菜单按钮,能将该文件夹下所有的BE,BP等忽略文件自动添加到.gitignore文件中。

  1. Windows文件夹右击菜单机制

右击菜单机制是卸载注册表中的。

路径为:计算机\HKEY_CLASSES_ROOT\Directory\shell

了解到这个之后可以自己添加一个右击菜单。

其原理就是再command节点下增加
默认的数据,
数据就是调用的exe路径。并且可以将当前点击的文件夹路径已参数的形式传递过去。

  1. 制作安装程序

  1. Application Folder

应用程序文件夹"即"Application Folder"表示要安装的应用程序需要添加的文件;

  1. User's Desktop

"用户桌面"即"User's Desktop"表示:这个应用程序安装完,用户的桌面上的创建的.exe快捷方式。

  1. User's Programs Menu

"用户的'程序'菜单"即"User's Programs Menu

Menu"表示:应用程序安装完,用户的"开始菜单"中的显示的内容,一般在这个文件夹中,需要再创建一个文件用来存放:应用程序.exe和卸载程序.exe;

  1. 写入注册表

我们需要再安装完成之后写入注册表信息,

所以需要一个继承System.Configuration.Install.Installer的类,可以重写

BeforeInstall,AfterInstall,AfterRollback,AfterUninstall,BeforeRollback,BeforeUninstall等方法 。

我们需要重写AfterInstall方法。

 

  1. 创建一个类库工程

类文件继承System.Configuration.Install.Installer

//绑定完成安装事件的处理方法

this.AfterInstall += InstallerClass_AfterInstall;

//绑定卸载完成后事件的处理方法

this.AfterUninstall += InstallerClass_AfterUninstall;

 

全部代码如下:

 

using System.Collections;

using System.ComponentModel;

using Microsoft.Win32;

 

namespace UFIDA.UBF.GitIgnoreClassLibrary

{

[RunInstaller(true)]

public
class
InstallerClass : System.Configuration.Install.Installer

{

 

private
static
string shellPath = "Directory\\shell";

private
static
string u9GitIgnore = "U9GitIgnore";

private
static
string initIgnoreFiles = "UFIDA.UBF.GitIgnoreFiles.WinForm.exe";

private
static
string contextMenuName = "[u9]自动生成git忽略文件";

public InstallerClass()

: base()

{

//绑定完成安装事件的处理方法

this.AfterInstall += InstallerClass_AfterInstall;

//绑定卸载完成后事件的处理方法

this.AfterUninstall += InstallerClass_AfterUninstall;

}

 

///
<summary>

/// 卸载之后,删除注册表

///
</summary>

///
<param name="sender"></param>

///
<param name="e"></param>

private
void InstallerClass_AfterUninstall(object sender, System.Configuration.Install.InstallEventArgs e)

{

RegistryKey root = null;

RegistryKey rk = null;

RegistryKey u9 = null;

try

{

root = Registry.ClassesRoot;

rk = root.OpenSubKey(shellPath, true);

if (rk != null)

{

u9 = root.OpenSubKey(shellPath + "\\" + u9GitIgnore, true);

if (u9 != null)

{

rk.DeleteSubKeyTree(u9GitIgnore);

}

}

}

finally

{

if (root != null)

root.Close();

if (rk != null)

rk.Close();

if (u9 != null)

u9.Close();

}

 

}

 

 

///
<summary>

/// 安装完成之后写入注册表

///
</summary>

///
<param name="sender"></param>

///
<param name="e"></param>

private
void InstallerClass_AfterInstall(object sender, System.Configuration.Install.InstallEventArgs e)

{

RegistryKey root = null;

RegistryKey rk = null;

RegistryKey u9key = null;

RegistryKey u9 = null;

try

{

//获取用户选择的安装路径

string path = this.Context.Parameters["targetdir"];

root = Registry.ClassesRoot;

rk = root.OpenSubKey(shellPath, true);

u9key = rk.CreateSubKey(u9GitIgnore);

u9key.SetValue("", contextMenuName);

u9 = root.OpenSubKey(shellPath + "\\" + u9GitIgnore, true);

var command = u9.CreateSubKey("command");

command.SetValue("", "\"" + path + "\\" + initIgnoreFiles + "\"" + " \"%1\"");

}

finally

{

if (root != null)

root.Close();

if (rk != null)

rk.Close();

if (u9key != null)

u9key.Close();

if (u9 != null)

u9.Close();

}

 

}

/// 重写安装过程方法

public
override
void Install(IDictionary stateSaver)

{

base.Install(stateSaver);

}

 

/// 重写卸载方法

public
override
void Uninstall(IDictionary savedState)

{

base.Uninstall(savedState);

}

 

/// 重写回滚方法

public
override
void Rollback(IDictionary savedState)

{

base.Rollback(savedState);

}

 

public
override
void Commit(IDictionary savedState)

{

base.Commit(savedState);

}

}

}

 

  1. 将上面的类文件添加到安装程序中

  1. 添加生成gitignore文件的程序exe

因为本程序还需要添加文件夹和文件,所以直接复制文件夹到Application Folder 中

 

打包的时候会将这些文件都安装进去。

  1. 添加自定义操作

可以看到四个子项:安装,提交,回滚,卸载。在安装上面点击右键->添加自定义操作->选择"主输出来自ClassLibrary(活动)"。这样,重新生成后,安装之后就会执行 OnAfterInstall代码了。 

 

因为在写入注册表过程中使用到了用户安装的文件夹路径,所以需要加上CustomActionData 参数: /targetdir="[TARGETDIR]\"

配置默认文件夹路径 YONYOU

  1. 生成

就可以右击安装项目生成了

  1. 安装

完成之后我们就可以看到注册表中已经添加上了。

  1. 查看

可以看到文件夹右击菜单中有刚才的按钮,点击就可以调用我们设置的exe程序,并将当前路径传到程序中。

  1. 注意-以管理员身份运行exe程序

右击exe项目属性,

在安全性中
勾选
启用ClickOnce安全设置

然后项目中会自动生成app.mainfest文件。打开该文件:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

将 asInvoker 替换为 requireAdministrator,保存

再将安全性中
启用ClickOnce安全设置
取消勾选

这样运行exe就是已管理员身份运行

自定义Windows右击菜单调用Winform程序的更多相关文章

  1. JS自定义鼠标右击菜单

    自定义鼠标右击菜单要素: 禁止页面默认右击事件 设置右击菜单的样式以及菜单出现的位置(通过捕获鼠标点击位置来确定菜单的位置) 鼠标在指定控件(区域)上右击时显示菜单(默认菜单隐藏,点击鼠标右键时显示) ...

  2. js调用winform程序(带参数)

    我们会发现,我们点击迅雷下载的时候  网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...

  3. 自定义windows新建菜单

    注册表下找到hkey_classes_root 找到想要新建的文件扩展名(.txt,.php,.html,.xml etc.) 创建名为ShellNew的键,再在其下添加NullType的项

  4. Windows中与系统关联自己开发的程序(默认打开方式、图标、右击菜单等)

    1. 默认打开方式 1.1. 代码支持 在Windows下,某个特定后缀名类型的文件,如果要双击时默认用某个程序(比如自己开发的WinForm程序)打开,代码中首先肯定要支持直接根据这个文件进行下一步 ...

  5. C#之VS2010ASP.NET页面调用Web Service和winform程序调用Web Service

    一:用ASP.NET调用Web Service 打开VS2010,打开“文件-新建-网站”,选择“ASP.NET网站” 选好存储位置,语言后点击确定,进入默认页面.然后先添加Web引用,把WebSer ...

  6. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  7. 网页调用本地程序(Windows下浏览器全兼容)

    用网页调用本地应用程序的思路是,先进行注册表注册自定义一个URL Protocol协议,再利用URL Protocol实现网页调用本地应用程序. 1.先写一个注册表文件,将其保存为.reg后缀的注册表 ...

  8. 一个简单的winform程序调用webservices

    本文原创,如需转载,请标明源地址,谢谢合作!http://blog.csdn.net/sue_1989/article/details/6597078 本文的编写IDE为VSTS2008和.NET F ...

  9. C/C++:Windows编程—调用DLL程序的2种方法(转载)

    文章为转载,原文出处https://blog.csdn.net/qq_29542611/article/details/86618902 前言先简单介绍下DLL.DLL:Dynamic Link Li ...

随机推荐

  1. npm install详解

    package.json中dependencies和devDependencies的部分都会被安装,区别在于前者用于生产环境,后者用于开发环境-g 表示全局安装,通常用于安装脚手架等工具–save(- ...

  2. zznuoj 1195 : 猴子选大王(结构体专题)

    题目描述 n只猴子围坐成一个圈,按顺时针方向从1到n编号.然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王. ...

  3. 异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项。试图加载格式不正确的程序。

    异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项.试图加载格式不正确的程序. 解决方法: 点击 ...

  4. JVM垃圾收集器-G1收集器

    G1收集器是当前收集器技术发展的最前沿成果,在JDK1.6_Updata14中提供了Early Access版本的G1收集器以供适用.G1收集器是垃圾收集器理论进一步发展的产物,它与前面的CMS收集器 ...

  5. JavaScript中函数引用调用和函数直接调用的区别

    首先看下面的代码: var x = 1 var f1 = function( f ) { var x = 2 ; f( ' console.log( x ) ' ) } var f2 =  funct ...

  6. GAN试验记录.

    1.GAN目标函数不收敛,参数难调 2.数据集与生成集比例 3.生成四不像,模式崩塌

  7. QC3.0充电标准

  8. 前端基础:web语义化

    web语义化 一.什么是web语义化? web语义化包含两方面,一是html标签语义化,简单来说就是要用合适的标签来表述适当的内容,标题用<h1>~~<h6>标签,段落用< ...

  9. 12 个 JS 技巧

    1. 过滤唯一值 ES6 引入了 Set 对象和延展(spread)语法…,我们可以用它们来创建一个只包含唯一值的数组. 复制代码     const array = [1, 1, 2, 3, 5, ...

  10. windows 时间服务器配置详解

    最近发现公司的服务器时间一直不准确,也无法和外部时间源进行同步.公司是域环境,按理说客户端PC应该自动和域控AD进行时间同步,但是PC机时间老是不能同步,不是慢了就是快了,就是和域控时间不一致.其它服 ...