Как Windows определяет, в какую папку помещаются локальные данные AppData?

Я знаю, что данные локального приложения хранятся в заданном месте на диске для моего приложения:

c:\Users\jonathan\AppData\Local\MyCompany\MyApp_In_Question_Url_fhjsu6dhsj673dkncsdhjfdf

Он содержит несколько подпапок, содержащих настройки приложения (user.config), которые обычно имеют форму «6.1.5944.23465».

Мы делаем прямую копию файла по месту установки, и запуск нового исполняемого файла с ярлыка на рабочем столе в первый раз обычно создает новую подпапку той же формы (т.е. 6.1.5966.34567), что требует от нас вызова настроек .Обновление

Пока все хорошо (хотя это, вероятно, не очень хорошая практика).

Недавно я обновил приложение с .NET 3.5 до .NET 4.6.2, и на некоторых машинах оно полностью создает новую папку:

c:\Users\jonathan\AppData\Local\MyCompany\MyApp_In_Question_Url_aaabf35hhsjd4hkwn83kfcm

И новая подпапка вида 6.1.5977.10245.

Это проблема, потому что ярлык на рабочем столе больше не работает, а настройки нельзя обновить и требуют повторного входа конечным пользователем (который не всегда их знает).

Большинство машин (все тестовые и UAT) не демонстрируют такого поведения.

У меня такой вопрос:

Каков механизм принятия решения о том, что параметры исполняемого файла должны храниться в совершенно новом месте, а не во вложенной папке?

Как следствие этого:

Могу ли я установить это так, чтобы это был точно такой же продукт, и настройки можно было бы продолжать обновлять?


person Jonathan    schedule 18.01.2017    source источник
comment
Проблема определенно наблюдалась в Windows 8, для справки.   -  person Jonathan    schedule 18.01.2017
comment
Я уже сталкивался с этой проблемой раньше, вот хороший вопрос, где Гю объясняет, как рассчитать папку настроек social.msdn.microsoft.com/Forums/ vsstudio/en-US/. В моем случае (заявка не была подписана) хэш был base32 репрезентации пути. Здесь stackoverflow.com/questions/11339704/ - это ответ, как получить путь к вашей папке конфигурации из вашего приложения.   -  person vitalygolub    schedule 18.01.2017


Ответы (1)


Я понял, что иногда поток кода создает первую настройку из dll, а иногда из основного исполняемого файла, и я делаю некоторые пользовательские настройки My.Settings (в одном из фрагментов VB), что немного беспорядочно.

Если вам интересно: чтобы восстановить настройки, мне пришлось просмотреть все LocalApplicationData в поисках предыдущих настроек моего приложения.

Private Shared Function FindFromPreviousSettings() As MigratableSettings
    ' Find the App_Data folder, and look to see if there are any other 
    ' config settings which are valid, authenticated, etc.

    Dim likelyConfigPath = New DirectoryInfo(
        Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
            "My_Software_Company"
        )
    )

    Dim allValidConfigs = SearchMyDirectory(likelyConfigPath, "user.config")

    Dim ver As Func(Of FileInfo, Version)
    ver = Function(fi)
        Try
            'Find out the version of this file. Bigger is better.
            Return New Version(fi.Directory.Name)
        Catch ex As Exception
            Return New Version()
        End Try
    End Function

    Dim latestValidFile = allValidConfigs.OrderByDescending(ver).FirstOrDefault()
    Dim latestValidSettings = ReadSettingsFromConfigFile(latestValidFile)

    Return latestValidSettings
End Function
person Jonathan    schedule 10.02.2017