2012-01-25 135 views
0

我正在构建数字标牌应用程序,我想用ClickOnce部署它。 (我觉得这是最好的方法。)当我从Visual Studio(VS)启动应用程序时,它效果很好。应用程序会下载大量的图片,从我的web服务,并将它们保存到磁盘:当我需要生成几个大文件时使用ClickOnce?

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

当我开始我的部署的应用程序,它显示启动画面,然后消失。该进程保持运行,但UI不显示。我想知道如果我的saveDir如上所示是给我麻烦?

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

回答

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; 
} 
+0

为什么'StartupPath'?可能对Vista/W7/W8没有权限。 ['Environment.GetFolderPath()'](http://msdn.microsoft.com/en-us/library/14tx8hby.aspx)可以帮助找到更好的。 – user7116

+0

谢谢,如果我允许用​​户浏览磁盘上的文件夹,说大量的图像,我的应用程序就可以访问c:\ myimages所有的时间? –

+0

@BrianHvarregaard:只要他们每次运行它都有权访问该文件夹。 – user7116

相关问题