C# 在需要生成多个大文件时使用ClickOnce?

C# 在需要生成多个大文件时使用ClickOnce?,c#,clickonce,C#,Clickonce,我正在构建一个数字看板应用程序,我想使用ClickOnce部署它。(我觉得这是最好的方法。)当我从VisualStudio(VS)启动应用程序时,效果非常好。应用程序从我的web服务下载大量图像并将其保存到磁盘: string saveDir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName; 当我启动部署的应用程序时,它会显示初始屏幕,然后消失。进程保持运行,但UI不显示。我想知道上面显示的

我正在构建一个数字看板应用程序,我想使用ClickOnce部署它。(我觉得这是最好的方法。)当我从VisualStudio(VS)启动应用程序时,效果非常好。应用程序从我的web服务下载大量图像并将其保存到磁盘:

string saveDir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;
当我启动部署的应用程序时,它会显示初始屏幕,然后消失。进程保持运行,但UI不显示。我想知道上面显示的
saveDir
是否给我带来了麻烦


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

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

当通过ClickOnce安装应用程序时,该应用程序将安装在用户的文件夹中,并且相当混乱。此外,位置可能会随着后续应用程序更新而改变,因此您不能保证在每次更新中都会存在任何缓存的、下载的文件

要解决此问题,ClickOnce确实提供了一个
数据
目录,该目录未被混淆,可用于缓存本地数据。唯一需要注意的是,此目录不适用于应用程序的非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;
 }

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

当通过ClickOnce安装应用程序时,该应用程序将安装在用户的文件夹中,并且相当混乱。此外,位置可能会随着后续应用程序更新而改变,因此您不能保证在每次更新中都会存在任何缓存的、下载的文件

要解决此问题,ClickOnce确实提供了一个
数据
目录,该目录未被混淆,可用于缓存本地数据。唯一需要注意的是,此目录不适用于应用程序的非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;
 }

为什么
StartupPath
?可能没有Vista/W7/W8的权限。可以帮助找到更好的。谢谢,如果我允许用户浏览磁盘上的文件夹,比如说其中有很多图像,那么我的应用程序是否可以一直访问例如c:\myimages?@BrianHvarregaard:只要他们在您每次运行该文件夹时都有权限。@6LV:是的,当访问通过CD或其他方式部署的已部署应用程序的位置时,您的方法会更好,因为代码片段来自一个旧的示例,并且该示例很可能用于调试,从这个角度来看,我个人喜欢将数据保存在测试文件夹中。对于更广泛的公众来说,您的方法当然更好,因为他们可能会找到解决类似问题的方法。我将修改我的评论并对此发表评论。为什么
StartupPath
?可能没有Vista/W7/W8的权限。可以帮助找到更好的。谢谢,如果我允许用户浏览磁盘上的文件夹,比如说其中有很多图像,那么我的应用程序是否可以一直访问例如c:\myimages?@BrianHvarregaard:只要他们在您每次运行该文件夹时都有权限。@6LV:是的,当访问通过CD或其他方式部署的已部署应用程序的位置时,您的方法会更好,因为代码片段来自一个旧的示例,并且该示例很可能用于调试,从这个角度来看,我个人喜欢将数据保存在测试文件夹中。对于更广泛的公众来说,您的方法当然更好,因为他们可能会找到解决类似问题的方法。我将修改我的评论,并就此发表评论。