刪除的作法在MSDN上也提到無法刪除有子目錄與檔案的目錄,所以只好故技重施。
而在Installer的設定上,一個是屬於afterinstall call,一個為afteruninstall call。
在下一篇整合實在一起提出好了,這也是網路上蠻常看到的教學中所提到的。
using System.IO,可以讓你輕鬆coding。我coding的時候沒加,方便轉載。
因為installer不會紀錄額外目錄路徑的緣故,就自己寫個log吧。
這段要寫在afterinstall裡。
//write additional appPath
FileStream fsFile = new FileStream(logPath + "log.txt", FileMode.Create);
StreamWriter swWriter = new StreamWriter(fsFile);
swWriter.WriteLine(appPath);
swWriter.Close();
結束安裝後會在logPath裡產生紀錄appPath的log.txt。
接著是刪除,這部份在afteruninstall。
用writeline、readline作路徑存取真的很方便。
//read addtional appPath
FileStream lsFile = new FileStream(logPath + "log.txt", FileMode.Open);
StreamReader srReader = new StreamReader(lsFile);
string line = srReader.ReadLine();
while (line != null)
{
recursiveDel(line);
System.IO.Directory.Delete(line);
line = srReader.ReadLine();
}
srReader.Close();
System.IO.File.Delete(logPath + "log.txt");
有了appPath再丟給delete function去處理就好。
//***********recursiveDel*********** private void recursiveDel(string targetPath) { if (System.IO.Directory.Exists(targetPath)) { //delete files string[] files = System.IO.Directory.GetFiles(targetPath); foreach (string f in files) { string fileName = System.IO.Path.GetFileName(f); string destFile = System.IO.Path.Combine(targetPath, fileName); System.IO.File.Delete(destFile); } //delete directories string[] dirs = System.IO.Directory.GetDirectories(targetPath); foreach (string d in dirs) { string nextTarget = d + "\\"; recursiveDel(nextTarget); System.IO.Directory.Delete(d); } } }//End recursiveDel
下一篇是把複製和刪除放進installer中啦,完結篇。
參考連結:
http://msdn.microsoft.com/zh-tw/library/cc148994.aspx
http://msdn.microsoft.com/zh-tw/library/kx3852wf(VS.80).aspx
1 意見:
意見想不到一年過去了,胎死腹中 XD
Reply