Использование ClickOnce, когда мне нужно создать несколько больших файлов? - PullRequest
0 голосов
/ 25 января 2012

Я создаю приложение для цифровых вывесок и хочу развернуть его с помощью ClickOnce.(Я считаю, что это лучший подход.) Когда я запускаю приложение из Visual Studio (VS), оно прекрасно работает.Приложение загружает много изображений из моего веб-сервиса и сохраняет их на диск:

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

Когда я запускаю развернутое приложение, оно показывает заставку и затем исчезает.Процесс продолжает работать, но пользовательский интерфейс не отображается.Мне интересно, если мой saveDir, как показано выше, доставляет мне проблемы?

Как найти мое установленное приложение?(Мне нужно сделать лицензионные файлы и т. Д.)

1 Ответ

3 голосов
/ 26 января 2012

Я не уверен, что это корень вашей проблемы, но я настоятельно рекомендую вам изменить структуру хранения информации вашего приложения.

Когда приложение устанавливается через 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;
 }
...