2013-02-27 142 views
0

我在C#中有一个ClickOnce应用程序,我想在自动卸载过程中卸载所有文件。如何在卸载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应用程序(用于帮助THX @JRoughan), 现在,我看到我的 “APPLICATION_PATH” 返回空,我已经改变我的代码:

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是回报,代码不approuved的“System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed”,但为什么呢?我已经安装了一个新的clickonce应用程序......并且部署了应用程序,代码应该返回“CurrentDeployment.DataDirectory”!不是?

最后编辑

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

+0

我认为尾随的反斜杠可能与它有关。 – 2013-02-27 09:07:15

+0

@JRoughan建议编辑时,请尝试立即修复该帖子的所有问题,以便您不必在同一帖子上提出两个修改。 – Spontifixus 2013-02-27 09:18:33

+0

@Spontifixus我再次编辑它,因为它仍然很难看。你为什么不鼓励改进?你觉得我正在试图让这个系统获得2分吗? – JRoughan 2013-02-27 09:28:44

回答

1

如果你的问题是如何调试已安装的ClickOnce应用程序,所以你可以清楚地看到发生了什么,你应该能够将调试器附加使用VS菜单进程的调试 - >附加到进程“。确保首先加载正确的解决方案。

如果你只是问为什么数据目录没有被正确地清洁,我不知道;该文件夹应该遵循ClickOnce安装的生命周期,并在卸载过程中进行清理。

难道你从这个文件夹加载资源不释放他们,让他们在卸载的时间锁定和不可删除?

+0

我不知道,我的应用程序有两个错误,这(System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory,不起作用[当我启动我的Clickonce应用程序,此应用程序崩溃...])和其他,当我卸载我的clickonce应用程序,卸载程序不会杀死我的应用程序进程)也许两个错误链接? 我看你的解决方案“附加进程”在调试器。 Thx – 2013-02-27 09:25:01

+0

嗨,我不试图附加一个进程,我的Clickonce发布崩溃,当我启动应用程序,并且,进程被杀死与崩溃:'(谢谢你的想法。 – 2013-02-27 09:30:26

+1

你可以尝试把'Thread.Sleep() '在应用程序一开始就给你时间来附加?多久会崩溃?更好的办法是在Main的第一行添加一个'System.Diagnostics.Debugger.Launch()',并选择你现有的VS实例调试 – JRoughan 2013-02-27 09:36:00

0

有一个在ClickOnce部署的机制,当您卸载该应用程序来执行任何种类的任务。从理论上讲,ClickOnce清道夫最终会出现并处理文件,但我觉得这是不可靠的。基本上,对于安装和运行程序来清除\ apps \ 2.0 \ data \任何文件夹的问题,您无能为力。

相关问题