安装包最基本的功能就是打包文件和解压文件。实现思路如下:
.NET提供了资源文件.resx文件,里面可以存放各种格式的数据:字符串、图片、二进制等。最重要的是此资源文件可以在编译时嵌入到Exe中,Exe运行时可以从此资源文件中读取所需内容。我们将利用此特性将所需的文件打包到安装包中,安装时再进行解压。为了统一,本安装包将所有的文件都统一使用二进制保存入资源文件中。
打包代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Resources;
namespace ResourcePacker
{
static class Program
{
public const string SOURCE_FOLDER = "Source";
public const string FILELIST_RESFILE = "FileList.resx";
public const string NODE_FILENAMES = "^FileNames^";
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
string currentDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string sourceDirectory = System.IO.Path.Combine(currentDirectory,SOURCE_FOLDER);
string fileListPath = System.IO.Path.Combine(currentDirectory, FILELIST_RESFILE);
if (!System.IO.Directory.Exists(sourceDirectory))
{
return;
}
string[] files = System.IO.Directory.GetFiles(sourceDirectory, "*", System.IO.SearchOption.AllDirectories);
if (files.Length == 0)
{
return;
}
ResXResourceWriter resWriter = new ResXResourceWriter(fileListPath);
string file = "";
string fileName = "";
string fileNames = "";
try
{
for (int i = 0; i < files.Length; i++)
{
file = files[i];
fileName = System.IO.Path.GetFileName(file);
resWriter.AddResource(fileName, System.IO.File.ReadAllBytes(file));
fileNames += (fileNames.Length > 0 ? (";" + Environment.NewLine) : "") + fileName;
}
resWriter.AddResource(NODE_FILENAMES, fileNames);
}
catch (Exception e)
{
Console.Write(e.ToString());
}
finally
{
resWriter.Generate();
resWriter.Close();
}
}
}
}
此代码如何工作:
-
新建项目
使用VS新建一个Windows应用程序类型的项目,项目名为ResourcePacker。然后将此代码放入Program.cs文件中。
-
定义源文件路径
在项目的生成输出路径下新建文件夹Source,将需要打包的文件存放在Source文件夹下。
-
生成项目
生成项目,运行ResourcePacker.exe即可将Source中的文件打包到FileList.resx资源文件中。
至此,打包工作已经完成,下篇文章将讲解如何从资源文件中提取文件。
本文章由创风网原创,转载请注明出处:http://www.windite.com/article/details/vea5ry14