关于打包,用程序操作文件。
新建一个项目文件。添加一个新的安装类:install类,install类主要是继承了
System.Configuration.Install.Installer,所以在引用中要加载System.Configuration.Install的dll,
然后重写 OnAfterInstall方法
protected override void OnAfterInstall(IDictionary savedState)
{base.OnAfterInstall (savedState);}
在这个方法里可以写操作的代码了!
——————————————————————————————————
关于注册表操作!
using Microsoft.Win32;
引用上面那个命名空间
定义注册表字段:
RegistryKey RegLocalMachie,RegSoftWare;
通过注册表得到文件夹的路径:
RegLocalMachie=Registry.LocalMachine;
RegSoftWare=RegLocalMachie.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion");
string commonFileDir= RegSoftWare.GetValue("CommonFilesDir").ToString()+"\\SuperMap";
得到的文件夹SuperMap在program files\common files\的路径
不过在对注册表操作以后要把注册表关了:
RegSoftWare.Close();
string[] files=System.IO.Directory.GetFiles(commonFileDir);//存放commonFileDir文件夹的文件名
。
遍历文件夹下面的文件并修改文件夹下面的文件属性:
foreach(string file in files)
{
System.IO.FileInfo f=new System.IO.FileInfo(file);
f.Attributes=System.IO.FileAttributes.Normal;
}
引用了System.Configuration.Install以后,就可以得到Context对象,
string targetdir= this.Context.Parameters["TARGETDIR"]+"\\temp";
从而可以根据上面的代码得到安装目录的temp文件夹,
files=System.IO.Directory.GetFiles(targetdir);
System.IO.Directory.Delete(commonFileDir,true);
System.IO.Directory.CreateDirectory(commonFileDir);
foreach(string file in files)
{
System.IO.File.Copy(file,commonFileDir+"\\"+System.IO.Path.GetFileName(file),true);
//将现有文件复制到新文件,是否允许覆盖
}
————————————————————————————————
将包含install类的项目文件保存,然后在部署项目文件中添加项目输出中的主输出很内容文件选择
install的项目文件。然后在自定义安装中的“安装”中添加主输出来自install(活动)就可以在程序安装
的时候调用install类下的方法。
————————————————————
如果在install类中要调用比如像超图的smRegister.exe之类的文件。可以
System.Diagnostics.Process.Start(this.Context.Parameters["TARGETDIR"]+"\\smRegister.exe");
要达到这个效果。也可以在自定义操作中的安装或提交项中添加相应的文件就行。
浙公网安备 33010602011771号