簡體   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