我在 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 应用程序有管理员规则时,路径不起作用......感谢您的帮助!