繁体   English   中英

如何在WPF C#中使用生成器和存根

[英]How to use builder and stub in WPF C#

我尝试使用生成器和存根构建应用程序,但失败了

我的生成器代码:

File.Copy(AppDomain.CurrentDomain.BaseDirectory + @"\Camstub.exe", filepath);
            string split = "|";
            string info = split + CName.Text + split + Link.Text + split;

            FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
            BinaryWriter bw = new BinaryWriter(fs);
            fs.Position = fs.Length + 1;
            bw.Write(info);
            bw.Close();
            MessageBox.Show(info);

我的存根代码:

public MainWindow()
    {
        InitializeComponent();

        StreamReader sr = new StreamReader(System.Windows.Forms.Application.ExecutablePath);
        BinaryReader br = new BinaryReader(sr.BaseStream);
        byte[] fileData = br.ReadBytes(Convert.ToInt32(sr.BaseStream.Length));
        br.Close();
        sr.Close();

        ASCIIEncoding Enc = new ASCIIEncoding();
        string split = "|";
        string Message = Enc.GetString(fileData);
        MessageBox.Show(Message);

生成器中的消息框显示给我:

http://embed.gyazo.com/d8f55ce5ea608b3861e64862242b0012.png

该应用程序已成功构建,但执行我时显示的消息框显示:

在此处输入图片说明

因此,我希望两者都具有相同的消息框。

任何想法 ?

提前致谢 ;)

根据注释中给出的信息,您想阅读| CName | Link |。 文件末尾的数据。 | CName | Link | 数据可以具有可变长度。

为了处理可变长度的数据,您需要以某种方式指示数据的字节长度。 在给定的情况下,一个简单而合适的解决方案是将字节长度存储为| CName | Link |之后的文件末尾的2字节或4字节数字。 数据。 一个2字节的数字(即ushortUInt16 )允许指定一个最大长度为65536的长度,并且应该足以满足您的目的。 (如果数据可以大于64KB,则使用4个字节存储长度。)

因此,构建器应执行以下操作:

  1. 撰写| CName | Link | 字符串数据并将其存储在info变量中。
  2. 转换在信息串入一个字节数组具有选定文本编码。 (我建议使用UTF-8文本编码。)
  3. 将此字节数组追加到可执行文件。
  4. 将字节数组的长度作为2字节数字附加到可执行文件的末尾。


存根应执行以下操作:

  1. 确定可执行文件的文件大小。
  2. 打开可执行文件以进行读取。
  3. 将当前文件位置设置为fileSize-2,因此| CName | Link |的长度。 可以阅读。
  4. 读取2个字节的数字,并将其存储到ushort (或int )变量dataLength中
  5. 将当前文件位置设置为fileSize-2-dataLength。
  6. 读取| CName | Link |的字节。 数据。 读取的字节数由dataLength指定。
  7. 处理| CName | Link | 数据字节。 例如,使用构建器已使用的相同( )文本编码将它们转换为字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM