我在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 CRASH”。
如果我的APPLICATION_DATA_PATH正确,我不知道为什么我的这个不起作用......
您是否知道使用System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory
路径调试ClickOnce应用程序?或者想用ClickOnce卸载程序删除所有文件?
修改
我到调试我的ClickOnce应用程序(thx @JRoughan寻求帮助), 现在,我看到My“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应用程序具有管理员规则时,路径不起作用... 谢谢你的帮助!
答案 0 :(得分:1)
如果您的问题是如何调试已安装的ClickOnce应用程序,以便您可以准确地看到发生了什么,您应该能够使用VS菜单'Debug - >将调试器附加到进程。附加到流程'。确保首先加载正确的解决方案。
如果你只是问为什么没有正确清理数据目录,我不确定;此文件夹应遵循ClickOnce安装的生命周期,并在卸载期间进行清理。
您是否有可能从此文件夹中加载资源而不释放它们以便在卸载时锁定并取消删除?
答案 1 :(得分:0)
卸载应用程序时,ClickOnce部署中没有任何机制可以执行任何类型的任务。理论上,ClickOnce清道夫最终会出现并处理文件,但我发现这是不可靠的。基本上,关于安装和运行程序以清除\ apps \ 2.0 \ data \所涉及的任何文件夹,你无能为力。