在新建网站之前,就是要把打包好的项目拷贝一份到IIS指定的路径上,同时,还要为个别目录设置相应的访问权限!
于是就产生了两件事:
1。拷贝-》[这里我是采用RAR打包,然后解压]
2。设置权限
如果是用拷贝方式,关于文件夹Copy,可以参考我的这篇文章:
文件夹复制操作(非递归循环遍历文件夹)
http://www.cnblogs.com/cyq1162/archive/2007/05/28/762294.html
为什么我没采用拷贝的方法,前提有两个,就是项目的文件夹有太多,在制作应用程序安装程序时,只能添加文件,而文件夹只能一个一个的新建,太麻烦!要不就要把项目文件放到其它工程里,那通过项目主输出来实现。我也不想放到新工程或集成到工具项目里,麻烦!
于是,我通过压缩项目文件,当然没有压缩web.config,因为web.config是要修改的,在压缩包里就改不了。所以最后的做法是解压RAR+文件拷贝web.config!
关于RAR解压,这里给出一段代码就算解决了:
public bool WARToFoler(string rarFromPath, string rarToPath)
{
Process rarPro = new Process();
rarPro.StartInfo.FileName = AppConfig.SoftSetup_WinRARSystemPath;
rarPro.StartInfo.Arguments = string.Format(" x \"{0}\" \"{1}\" -o+ -r -ibck", rarFromPath, rarToPath);
rarPro.StartInfo.UseShellExecute = false;
rarPro.StartInfo.RedirectStandardInput = true;
rarPro.StartInfo.RedirectStandardOutput = true;
rarPro.StartInfo.RedirectStandardError = true;
rarPro.StartInfo.CreateNoWindow = true;
rarPro.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
rarPro.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(p_OutputDataReceived);
rarPro.ErrorDataReceived += new DataReceivedEventHandler(rarPro_ErrorDataReceived);
rarPro.Start();//解压开始
rarPro.BeginOutputReadLine();
rarPro.BeginErrorReadLine();
rarPro.WaitForExit();
rarPro.Dispose();
return IsOK;
}
void rarPro_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data!=null && e.Data != "")
{
outMsg.Text += "失败:" + e.Data + "\r\n";
IsOK = false;
}
}
void p_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
if (e.Data != null && e.Data != "")
{
outMsg.Text+="成功:" + e.Data + "\r\n";
}
}
AppConfig.SoftSetup_WinRARSystemPath这个是就是安装的RAR.exe路径!
-ibck参数是让解压在后台运行,这样可以不用弹出个解压框!
前些天也写过一篇和RAR相关的文章:
记录下关于调用RAR解压缩的问题
http://www.cnblogs.com/cyq1162/archive/2010/01/13/1646678.html
OK,RAR解压就这么告一段落,接下来,我有一个App_Data目录,由于会往里面写生成的xml,所以为之添加一个可写权限!
设置权限的方式有三种,一种用net自带的封装类。另一种直接调用cacls.exe实现,还有一种就是网上下的调用Microsoft.win32的某种复杂方式。
以下就用第一种了。用net自带的类实现,非常的简单,三行代码:
System.Security.AccessControl.DirectorySecurity fSec = new DirectorySecurity();
fSec.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
System.IO.Directory.SetAccessControl(path, fSec);
这里是添加了一个everyone用户,当然也可以换成aspnet用户,具体看安全性要求给了!后面就给出了所有权限。
具体关于权限的说明,多百google度或在vs下看按F1帮助文档就清楚了!
打完,收工!