如何把文件放到一个exe中 本帖最后由 feilign 于 2011-06-01 16:10:26 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 exe文件需要很复杂的逻辑进行替换文件,为什么非得把需要升级的文件打包到exe中呢?放在同一个目录下不就行了吗?获取时也方便... 把需要打包到exe的dll在项目中导入成资源文件,需要导出时,从资源文件获得byte[]然后写文件,文件的名称就是你要替换的dll的名称,目录就是这个要替换的dll的目录,替换前先拷贝个备份. 右键你的Exe项目, 然后属性-资源-添加资源-添加现有文件-选择你的Decimal.dll然后你就可以在程序里使用Properties.Resources.Decimal来引用你的dll的数据了返回的是byte[]类型的 写入到文件就行了. string srcPath = @"Decimal.dll"; string bakPath = @"bak.dll"; string exeFile = @"abc.exe"; if (File.Exists(srcPath)) { bool kill = false; label_0001: try { File.Copy(srcPath, bakPath); using (FileStream fs = File.Create(srcPath)) { byte[] data = Properties.Resources.Decimal; fs.Write(data, 0, data.Length); } } catch { //这里要出异常肯定是文件被占用了. //关闭占用dll的那个exe文件.假设为 abc.exe if (kill) { return;//防止死循环,这个时候就要看你程序是不是定义对了变量的值.如路径值,文件名称什么的. } Process[] ps = Process.GetProcesses(); foreach (Process p in ps) { try { if (p.ProcessName == exeFile) { p.Kill();//关闭这个程序 kill = true; goto label_0001;//跳转到0001继续执行. } } catch { //这里要还出异常,就不考虑了 } } } //到这里就结束了 } 你判断的是程序的版本信息所以只要你的exe能分清版本 就行看结果不要被中间的过程迷惑了 放到资源文件中,EXE检测环境允许的情况下,把资源文件中的DLL,释放并复制到指定位置. ReportViewer The definition of the report '' is invalid 在线请教,winform中datatimepicker如何只获取当前日期,而不要具体时分秒 大哥们帮帮忙!C#中 弹个消息框(要加声音) 请教,WPF winForm开发,选择文件夹多个图片并且预览该如何做 如何在一个窗体调用另一个窗体的某个控件? 找骗子,有新郑市的朋友进来一次 C#开发短信网关,寻求技术帮忙。 请教一下各位大虾有什么保护眼睛的好措拖 WPF,如何让窗体保持比例地改变尺寸 数据打包、上传的问题,希望大家给些帮助! c#图像处理问题 窗口韩文显示问题
放在同一个目录下不就行了吗?获取时也方便...
然后你就可以在程序里使用Properties.Resources.Decimal来引用你的dll的数据了
返回的是byte[]类型的 写入到文件就行了.
string srcPath = @"Decimal.dll";
string bakPath = @"bak.dll";
string exeFile = @"abc.exe"; if (File.Exists(srcPath))
{
bool kill = false;
label_0001:
try
{
File.Copy(srcPath, bakPath);
using (FileStream fs = File.Create(srcPath))
{
byte[] data = Properties.Resources.Decimal;
fs.Write(data, 0, data.Length);
}
}
catch
{
//这里要出异常肯定是文件被占用了.
//关闭占用dll的那个exe文件.假设为 abc.exe
if (kill)
{
return;//防止死循环,这个时候就要看你程序是不是定义对了变量的值.如路径值,文件名称什么的.
}
Process[] ps = Process.GetProcesses();
foreach (Process p in ps)
{
try
{
if (p.ProcessName == exeFile)
{
p.Kill();//关闭这个程序
kill = true;
goto label_0001;//跳转到0001继续执行.
}
}
catch {
//这里要还出异常,就不考虑了
}
}
}
//到这里就结束了
}
所以只要你的exe能分清版本 就行
看结果不要被中间的过程迷惑了