如何把文件放到一个exe中

feilign 2011-06-01 03:32:36
我现在在给一个加油站管理系统(客户机是加油机,服务器是控制加油机的那台电脑)做自动升级程序,具体的功能升级模块程序不是我写,我的工作内容是写一个程序,能把别人的写好的升级程序(dll)封装到一个exe文件中,升级的时候,检查软件是否正在使用,正在使用就关闭程序,然后再把要升级的功能做备份(用作升级失败是回滚,通过dll的版本号来辨别那个需要更新),再然后从这个exe文件中释放出要升级的dll覆盖对应的原dll,升级成功后删除以前的备份

我现在对要写这样一个程序所要用到的技术啥的不太清楚,求高手给提示
...全文
234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hinada99 2011-06-01
  • 打赏
  • 举报
回复
路过帮忙顶起~
xixihaha_2011_098 2011-06-01
  • 打赏
  • 举报
回复
放到资源文件中,EXE检测环境允许的情况下,把资源文件中的DLL,释放并复制到指定位置.
开发者孙小聪 2011-06-01
  • 打赏
  • 举报
回复
在打包的时候打进去 行不
feilign 2011-06-01
  • 打赏
  • 举报
回复
嗯,谢谢各位的提示
ycproc 2011-06-01
  • 打赏
  • 举报
回复
你判断的是程序的版本信息
所以只要你的exe能分清版本 就行
看结果不要被中间的过程迷惑了
人工智能算法 2011-06-01
  • 打赏
  • 举报
回复
右键你的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 {
//这里要还出异常,就不考虑了
}
}
}
//到这里就结束了
}
feilign 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sjzlxd 的回复:]
把需要打包到exe的dll在项目中导入成资源文件,需要导出时,从资源文件获得byte[]然后写文件,文件的名称就是你要替换的dll的名称,目录就是这个要替换的dll的目录,替换前先拷贝个备份.
[/Quote]

好高深啊,能不能详细解释下啊?
人工智能算法 2011-06-01
  • 打赏
  • 举报
回复
把需要打包到exe的dll在项目中导入成资源文件,需要导出时,从资源文件获得byte[]然后写文件,文件的名称就是你要替换的dll的名称,目录就是这个要替换的dll的目录,替换前先拷贝个备份.
libolei 2011-06-01
  • 打赏
  • 举报
回复
exe文件需要很复杂的逻辑进行替换文件,为什么非得把需要升级的文件打包到exe中呢?
放在同一个目录下不就行了吗?获取时也方便...
feilign 2011-06-01
  • 打赏
  • 举报
回复
自己顶下

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧