0

我在 C# 中有一个 ClickOnce 应用程序,我想在自动卸载期间卸载所有文件。

以前我使用以下内容返回我的应用程序数据路径:

static public string APPLICATION_DATA_PATH
{
        get
        {
            return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData).ToString(), "myFolder\\");
        }
} 

这将返回c://Users/UserName/AppData/MyFolder可行的方法,但是通过自动卸载 ClickOnce 应用程序,不会删除此文件夹。

现在,我测试:

static public string APPLICATION_DATA_PATH
{
    get
    {
        if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
        {
            // If Clickonce Application is deployed.
            return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory
        } 
        else
        {
            // If I'm in debug mode (with visual studio)
            return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData).ToString(), "myFolder\\");
        }
    }
} 

这适用于 Visual Studio 调试,但是当我发布我的应用程序并在任何计算机上安装时,我的应用程序崩溃并且 Windows 报告 (WER) 只显示“应用程序崩溃”。

如果我的 APPLICATION_DATA_PATH 正确,我不知道为什么我的这不起作用......

您对使用System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory路径调试 ClickOnce 应用程序有任何想法吗?还是使用 ClickOnce 卸载程序删除所有文件的想法?

编辑

我来调试我的 ClickOnce 应用程序(感谢@JRoughan 的帮助),现在,我看到我的“APPLICATION_PATH”返回 null,我已经更改了我的代码:

static public string APPLICATION_DATA_PATH
    {
        get
        {
            string path = null;                
            if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
            {
                path = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory;
            }

            return path;
        }
    }

如果返回 null,则代码不批准“System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed”,但为什么呢?我已经安装了一个新的 clickonce 应用程序......并且该应用程序已部署,代码应返回“CurrentDeployment.DataDirectory”!不 ?

最终编辑

最后,路径正常工作。在我的应用程序启动时,我在这里重新启动,如果应用程序没有管理员规则,但是,当 Clickonce 应用程序有管理员规则时,路径不起作用......感谢您的帮助!

4

2 回答 2

1

如果您的问题是如何调试已安装的 ClickOnce 应用程序,以便您可以准确了解正在发生的事情,您应该能够使用 VS 菜单“调试 -> 附加到进程”将调试器附加到进程。确保首先加载正确的解决方案。

如果您只是问为什么没有正确清理数据目录,我不确定;此文件夹应遵循 ClickOnce 安装的生命周期,并在卸载期间进行清理。

您是否有可能从该文件夹加载资源而不释放它们,因此它们在卸载时被锁定且不可删除?

于 2013-02-27T09:11:07.293 回答
0

当您卸载应用程序时,ClickOnce 部署中没有执行任何类型任务的机制。理论上,ClickOnce 清道夫最终会出现并处理文件,但我发现这不可靠。基本上,除了安装和运行程序来清除有问题的 \apps\2.0\data\whatever 文件夹之外,您无能为力。

于 2013-02-28T06:46:54.153 回答