EXE中添加个资源字符串,然后预留一定的位置,可以随便用点什么字符点位就行! string filename = textBoxEXE.Text;//要读写的EXE文件 int maxlen=379;//要写入串的最大长度,这个和EXE资源中的字符串预留的长度是一致 if (!File.Exists(filename)) { MessageBox.Show("EXE文件不存在!/n路径: " + filename); return; } string strconn="要写入EXE中的字符串" + "@";//最好加个结束标志,方便处理 if (strconn.Length>maxlen)// { MessageBox.Show("字符串太长!"); return; } int startpos = 422342;//这个数字为字符串在EXE中的位置,用二进制工具自己找 int startend = startpos+maxlen; FileStream filesstream = new FileStream(filename, FileMode.Open,FileAccess.Read); BinaryReader br=new BinaryReader(filesstream); byte[] bhead=br.ReadBytes(startpos);//读入前面的字节 FileStream filenew = new FileStream(filename+".tmp", FileMode.Create,FileAccess.Write);//临时文件 BinaryWriter objBinaryWriter = new BinaryWriter(filenew); objBinaryWriter.Write(bhead);//写入前面的字节 byte[] tmpconn = System.Text.Encoding.Default.GetBytes(strconn);//字节方式写入,用其它方式会有莫名妙的错误 objBinaryWriter.Write(tmpconn);//写入 byte byteend=0; for (int i = 0; i < maxlen - strconn.Length;i++ ) { objBinaryWriter.Write(byteend); }//剩余空间补0 byte[] bconn=br.ReadBytes(startend-startpos); byte[] bback = br.ReadBytes((int)filesstream.Length - startend); br.Close(); filesstream.Close(); objBinaryWriter.Write(bback);//写入后面的字节 objBinaryWriter.Close(); filenew.Close(); File.Delete(filename); File.Move(filename + ".tmp", filename);//替换原文件 MessageBox.Show("写入成功!"); 加了部分注释,自己看吧,不清楚可以联系我!