如何在卸载过程中编写自定义操作? 它需要批处理文件吗?
谢谢!
答案 0 :(得分:5)
user.config数据存储在%APPDATA%\ProjectName
文件夹中。
如果要在卸载时删除user.config数据,则可以使用System.IO.Directory.Delete("%APPDATA%\ProjectName");
注意:您可以使用以下Context.Parameters["assemblypath"]
来获取已安装的路径。这是用户选择安装项目的路径。
答案 1 :(得分:2)
根据上面的答案,这对我有用。对于我的应用程序,我只允许每个用户安装,而不是“所有用户”,因此我不必担心卸载多个用户,或者除了当前用户运行卸载之外的用户。如果您允许“所有用户”安装,那么您将遇到一些问题。
public override void Uninstall(System.Collections.IDictionary savedState)
{
String p = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CompanyName");
string[] ss = Directory.GetDirectories(p, "ProjectName.*");
foreach (string s in ss)
{
if(MessageBox.Show("Delete " + s + "?","Delete Settings?",MessageBoxButtons.YesNo) == DialogResult.Yes)
Directory.Delete(s, true);
}
base.Uninstall(savedState);
}
我实际上并没有将提示留在那里,这只是为了测试以确保我没有删除我的PC上的错误文件夹..直到此代码已经过全面测试。需要更改CompanyName和ProjectName以匹配您的项目。
我可能会添加一个页面来卸载UI,或者只是提示询问他们是否要删除所有设置(这样他们就可以选择不重新安装)。
答案 2 :(得分:2)
var filePath = Environment.ExpandEnvironmentVariables(@"%userprofile%\APPDATA/ProjectName");
System.IO.Directory.Delete(filePath );
答案 3 :(得分:0)
您可以编写自定义操作以在安装或卸载时触发可执行文件,或两者兼而有之。 例如:创建一个.exe,它将删除user.config文件夹。在二进制表中添加此exe。在CustomAction表中添加一个条目,其中Source是在二进制表中命名的外键,TArget是实际的exe文件名,类型= 2.现在在InstallExecuteSequence中添加此操作,其中包含您希望在安装过程中触发.exe的任何顺序
答案 4 :(得分:0)
1)Create a custom action (article includes pictures)
2)处理自定义操作的Uninstall
事件
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
try
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
path = Path.Combine(path, "{Your application folder name}");
Directory.Delete(path, true);
}
catch(Exception)
{
}
base.Uninstall(savedState);
}