C#编写功能让你的系统导入注册表文件时不提示
最近项目需要将授权文件导入系统,注册成服务,本来很简单的事情,只要写个服务就可以,而公司上级又不想给我源码。这就让我有点为难,很简单的工作,就变得复杂了。
如是我就用命令行的方式来实现,关键代码如下:
/// <summary>
/// 注册授权文件
/// </summary>
/// <param name="path">文件路径</param>
private static void RegLic( string path)
{
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.StandardInput.WriteLine(path + @"\DssLicSev.reg");
process.StandardInput.WriteLine("exit");
process.Close();
}
此方法运行良好,可是弹出提示框确认。这肯定不是我们所期望的。
百度一下,找到解决办法,可以不提示。就是打开注册表
[HKEY_CLASSES_ROOT\regfile\shell\open\command]
将其默认值改为regedit.exe /s"%1" 而不是regedit.exe "%1"
再重新运行就不弹出提示框,然后在安装程序里面执行导入reg文件时,即可。添加一个类库项目命名为InstallHelp,添加Install安装类,重写install方法附上关键代码
public override void Install(IDictionary stateSaver)
{
string installPath = this.Context.Parameters["targetdir"];//这软件的安装路径
ImporRegNoDialog(true);
RegLic( string path);
ImporRegNoDialog(false);
base.Install(stateSaver);
}
/// <summary>
/// 注册授权文件
/// </summary>
/// <param name="path"></param>
private static void RegLic( string path)
{
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.StandardInput.WriteLine(path + @"\DssLicSev.reg");
process.StandardInput.WriteLine("exit");
process.Close();
}
/// <summary>
/// 导入注册表无提示框
/// </summary>
/// <param name="isTrue">true不提示,false提示</param>
public static void ImporRegNoDialog(bool isTrue)
{
RegistryKey regClassesRoot = Registry.ClassesRoot;
RegistryKey regFile = regClassesRoot.OpenSubKey("regfile", true);
RegistryKey regShell = regFile.OpenSubKey("shell", true);
RegistryKey regOpen = regShell.OpenSubKey("open", true);
RegistryKey regCommand = regOpen.OpenSubKey("command", true);
string ss = string.Empty;
if (isTrue)
ss = "regedit.exe /s" + '"' + "%1" + '"';
else
ss = "regedit.exe " + '"' + "%1" + '"';
//默认值的名称为空,
regCommand.SetValue("", ss);
}
好了,现在只要在安装程序里打包即可,右键你的安装程序
选择自定义操作
编译程序。就可以实现了,先写到这里。吃饭去了。