当我需要生成几个大文件时使用ClickOnce?

时间:2012-01-25 19:05:42

标签: c# clickonce

我正在构建数字标牌应用程序,我想使用ClickOnce部署它。 (我觉得这是最好的方法。)当我从Visual Studio(VS)启动应用程序时,它工作得很好。该应用程序从我的Web服务下载了大量图像并将其保存到磁盘:

string saveDir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;

当我启动已部署的应用程序时,它会显示启动画面然后消失。该过程继续运行,但UI不显示。我想知道上面显示的saveDir是否给了我麻烦?

如何找到已安装的应用程序? (我需要制作许可证文件等)。

1 个答案:

答案 0 :(得分:3)

我不确定这是否是您问题的根源,但我强烈建议您更改存储应用程序信息的方式。

当通过ClickOnce安装应用程序时,该应用程序将安装在用户的文件夹中,并且它已经过相当混淆。此外,位置可能随后续应用程序更新而更改,因此您无法保证从更新到更新将存在任何缓存的下载文件。

要解决此问题,ClickOnce确实提供了一个Data目录,该目录未进行模糊处理,可用于缓存本地数据。唯一需要注意的是,此目录不适用于应用程序的非ClickOnce实例(例如VS调试器中运行的版本。)

要解决这个问题,您应该编写一个可用于获取数据目录的函数,而不管您的分发或执行方法如何。以下代码是函数应该是什么样子的示例:

//This reference is necessary if you want to discover information regarding
// the current instance of a deployed application.
using System.Deployment.Application;

//Method to obtain your applications data directory
public static string GetAppDataDirectory()
{
    //The static, IsNetworkDeployed property let's you know if
    // an application has been deployed via ClickOnce.
    if (ApplicationDeployment.IsNetworkDeployed)

        //In case of a ClickOnce install, return the deployed apps data directory
        //  (This is located within the User's folder, but differs between
        //  versions of Windows.)
        return ApplicationDeployment.CurrentDeployment.DataDirectory;

    //Otherwise, return another location.  (Application.StartupPath works well with debugging.)
    else return Application.StartupPath;
 }