C# 如何在WPF C中使用生成器和存根#
我尝试使用生成器和存根构建应用程序,但失败了 我的生成器代码:C# 如何在WPF C中使用生成器和存根#,c#,wpf,builder,stub,C#,Wpf,Builder,Stub,我尝试使用生成器和存根构建应用程序,但失败了 我的生成器代码: File.Copy(AppDomain.CurrentDomain.BaseDirectory + @"\Camstub.exe", filepath); string split = "|"; string info = split + CName.Text + split + Link.Text + split; FileStream fs = new F
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);
生成器中的消息框显示:
应用程序已成功构建,但执行时messagebox会显示:
因此,我希望这两种语言中的messagebox是相同的
有什么想法吗
提前感谢;) 根据评论中给出的信息,您希望从文件末尾读取| CName | Link |数据。|CName | Link |数据的长度可以是可变的 要处理可变长度数据,您需要指明数据的字节长度。在这里给出的场景中,一个简单而合适的解决方案是在| CName | Link |数据之后的文件末尾将字节长度存储为2字节或4字节的数字。2字节数字(即ushort或UInt16)允许指定最长为65536的长度,可能足以满足您的需要。(如果数据超过64KB,则使用4个字节存储长度。) 因此,建筑商应执行以下操作:
存根应该执行如下操作:
存根从可执行文件中读取前xxx字节(xxx等于文件长度),并将其放入信息中(注意,Windows可执行文件或DLL文件总是以魔法字节“MZ”开头)。在您的构建器中,变量信息由不同的数据(CName和Link)组成,因此您看到存根和构建器消息框之间的差异也就不足为奇了。没有理由期望两个MessageBox显示相同的数据……您是否打算读取附加在文件末尾的Cname/Link数据?如果是,这是恒定长度的Cname/链路数据,即恒定字节数;或者它的长度可以是可变的?是的,嗯,所以我必须在文件的末尾阅读,但是CName/链接的长度可以是可变的。谢谢你的帮助,我很确定你的解决方案是好的,但是我找到了另一个,我在“|CName | Link |”之前添加了一个字符串,比如“-START-”,然后我读取了所有流,并在“-START-”之后保留信息存根程序需要读取整个文件才能找到“-start-”标记。一种非常低效的做事方式。。。在我的方法中,只读取2+个dataLength字节。但是,我不知道您的应用场景。也许性能是无关紧要的,而您的方法正适合您的目的…:-)但是请考虑一下:如果可执行文件在其文件数据中已经包含“-START”,那该怎么办?那么你的方法失败了,而我的方法仍然可以正常工作。。。提示:这会发生,因为“-START-”字符串文字将是已编译C#代码的一部分,因此已经是已编译可执行文件的一部分P