在卸载期间强制删除user.config?

时间:2011-07-18 06:23:02

标签: c# visual-studio visual-studio-2008 setup-project

如何在卸载过程中编写自定义操作? 它需要批处理文件吗?

谢谢!

5 个答案:

答案 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);
    }