吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9095|回复: 41
收起左侧

[原创工具] 写了个Total Uninstall注册表代码转Inno注册表代码的工具

[复制链接]
lizhirui 发表于 2018-10-22 13:36
写了个Total Uninstall注册表代码转Inno注册表代码的工具
此工具还不太完善,望大家多多支持!
运行截图:
截图.png

下载链接在最下面,压缩包中\标准注册表文件格式转Inno代码\bin\Debug\标准注册表文件格式转Inno代码.exe为可执行文件


以下是源码:
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 标准注册表文件格式转Inno代码
{
    class Program
    {
        enum WordType
        {
            str = 0,
            assign = 1,
            num = 2,
            typesplit = 3,
            type = 4,
        }
        struct Word
        {
            public WordType Type;
            public string Text;
        }

        private static Word[] AnalysisLine(string line)
        {
            List<Word> Words = new List<Word>();
            var str = new StringBuilder();

            for(var i = 0;i < line.Length;i++)
            {
                switch(line[i])
                {
                    case '\"':
                        str = new StringBuilder();

                        while(line[++i] != '\"')
                        {
                            if(line[i] == '\\')
                            {
                                str.Append(line[++i]);
                            }
                            else
                            {
                                str.Append(line[i]);
                            }
                        }

                        Words.Add(new Word{Type = WordType.str,Text = str.ToString()});
                        break;

                    case '=':
                        Words.Add(new Word{Type = WordType.assign,Text = line[i] + ""});
                        break;

                    case ':':
                        Words.Add(new Word{Type = WordType.typesplit,Text = line[i] + ""});
                        break;

                    default:
                        str = new StringBuilder();

                        while(i < line.Length && line[i] != ':')
                        {
                            str.Append(line[i++]);
                        }

                        if(i < line.Length && line[i] == ':')
                        {
                            Words.Add(new Word{Type = WordType.type,Text = str.ToString()});
                            i--;
                        }
                        else
                        {
                            Words.Add(new Word{Type = WordType.num,Text = str.ToString()});
                        }

                        break;
                }
            }

            return Words.ToArray();
        }

        private static string GenerateResultLine(string curpath,Word[] words)
        {
            string root;
            string subkey;

            var pos = curpath.IndexOf('\\');

            if(pos < 0)
            {
                pos = curpath.Length;
            }

            var str = curpath.Substring(0,pos).ToUpper();

            switch(str)
            {
                case "HKEY_LOCAL_MACHINE":
                    root = "HKLM";
                    break;

                case "HKEY_CLASSES_ROOT":
                    root = "HKCR";
                    break;

                case "HKEY_CURRENT_USER":
                    root = "HKCU";
                    break;

                default:
                    throw new Exception("不支持的Root:" + str);
            }

            subkey = curpath.Substring(pos,curpath.Length - pos);

            if(words == null)
            {
                return "Root: " + root + "; SubKey: " + subkey + "; Flags: uninsdeletekeyifempty";
            }
            else
            {
                var name = "";
                var value = "";
                var type = "";

                var cur = 0;

                if(words[cur].Type != WordType.str)
                {
                    throw new Exception("属性名不为字符串!");
                }

                name = words[cur++].Text;

                if(words[cur++].Type != WordType.assign)
                {
                    throw new Exception("属性名后不为赋值符号!");
                }

                if(words[cur].Type == WordType.type)
                {
                    switch(words[cur++].Text)
                    {
                        case "dword":
                            type = "dword";
                            break;

                        case "qword":
                            type = "qword";
                            break;

                        default:
                            throw new Exception("不支持的类型:" + type);
                    }

                    if(words[cur++].Type != WordType.typesplit)
                    {
                        throw new Exception("类型后不为类型分隔符!");
                    }
                }
                else
                {
                    type = "string";
                }

                value = words[cur++].Text;

                if(cur < words.Length)
                {
                    throw new Exception("值后有多余字符!");
                }

                return "Root: " + root + "; SubKey: " + subkey + "; ValueType: " + type + "; ValueName: " + name + "; ValueData: " + value + "; Flags: uninsdeletevalue uninsdeletekeyifempty";
            }
        }

        static void Main(string[] args)
        {
            try
            {
                //var srcpath = @"D:\程序\项目\标准注册表文件格式转Inno代码\Total Uninstall代码以及Inno代码\Total Uninstall 注册表.txt";
                //var dstpath = @"D:\程序\项目\标准注册表文件格式转Inno代码\Total Uninstall代码以及Inno代码\output.txt";

                Console.WriteLine("吾爱破解论坛 [url]www.52pojie.cn[/url] lizhirui制作");
                Console.Write("请输入源文件路径:");
                var srcpath = Console.ReadLine();
                Console.Write("请输入目标文件路径:");
                var dstpath = Console.ReadLine();

                var curpath = "";

                //Read Source File
                var lines = File.ReadAllLines(srcpath);
                var result = new StringBuilder();

                foreach(var line in lines)
                {
                    var pline = line.Trim();

                    //Skip Comment
                    if(pline == "" || pline[0] == ';')
                    {
                        continue;
                    }

                    if(pline[0] == '[' && pline[pline.Length - 1] == ']')
                    {
                        curpath = pline.Substring(1,pline.Length - 2);
                        GenerateResultLine(curpath,null);
                    }
                    else if(curpath != "")
                    {
                        var words = AnalysisLine(pline);
                        result.Append(GenerateResultLine(curpath,words));
                        result.Append("\r\n");
                    }
                }

                File.WriteAllText(dstpath,result.ToString());
                Console.WriteLine("转换成功!");
            }
            catch(Exception ex)
            {
                Console.WriteLine("错误:" + ex.Message);
                throw ex;
            }

            Console.ReadKey();
        }
    }
}


源码使用VS2017编写
标准注册表文件格式转Inno代码.rar (183.8 KB, 下载次数: 116)

免费评分

参与人数 8吾爱币 +14 热心值 +7 收起 理由
silvanevil + 1 + 1 谢谢@Thanks!
fearyuan + 1 + 1 我很赞同!
云在天 + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
loversoft + 1 谢谢@Thanks!
dtfans + 1 + 1 谢谢@Thanks!
兔子我是胡萝卜 + 3 + 1 谢谢@Thanks!
冥界3大法王 + 1 @lizhirui 等这功能好久了,这绝对是人才~~英雄所见略同啊
didi科学家 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bachelor88 发表于 2018-10-25 16:03
这个厉害了,看看                                                      
ldflmh 发表于 2018-11-29 23:42
大神,我是无基础小白一个,闲着无聊折腾,我用inno setup打包谷歌浏览器,Win10系统如何让浏览器安装完成就能成为默认浏览器呢。
用注册表方法是不行了,有hash值,是不是我这样的小白是很难实现了?
如果能实现,不是很复杂,请大神告知,谢了。
s.y007 发表于 2018-10-22 13:39
didi科学家 发表于 2018-10-22 13:40
膜拜大佬,安装包制作用的到
冥界3大法王 发表于 2018-10-22 13:50
        @lizhirui 等这功能好久了,这绝对是人才~~英雄所见略同啊
lzr1000 发表于 2018-10-22 13:55
支持一下,谢谢。
heang567 发表于 2018-10-22 14:06 来自手机
膜拜大佬,码客侠中高手!
david743 发表于 2018-10-22 14:28
安装包制作..
用的到...谢谢分享...
hairch 发表于 2018-10-22 14:30
这个不错,要支持...
yaoguen 发表于 2018-10-22 15:14
好东西
谢谢分享!!
zxinyun 发表于 2018-10-22 15:22
编译一下看看效果
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表