2013-05-26 2 views
2

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

В моем понимании это происходит из-за того, что местоположение в папке данных приложения также основано на пути .exe, которое принимается во внимание при создании хеша.

Я знаю, что существуют разные альтернативы либо с помощью реестра, либо путем создания настраиваемого файла конфигурации вручную, но мой вопрос в том, можно ли сохранить пользовательские настройки, когда приложение (.exe) перемещено в другое место с возможностями Microsoft по умолчанию?

Для моих тестов я использую автономное приложение (только один файл .exe). Просто переместив файл, скажем, /Desktop/Test/ от /Desktop/ вызывает создание новой папки под номером C:\Users\<user>\AppData\Local\<company>\Appname_Url_<hash> с по умолчанию user.config. Старый user.config по-прежнему доступен, поэтому, если вы перемещаете файл .exe обратно в предыдущее место, тогда предыдущие настройки снова загружаются. Это становится затруднительным не только потому, что вы теряете настройки, но если вы переместите файл 10 раз в 10 разных местах, вы получите 10 новых папок в appdata.

+0

Может быть лучше подходит для http://superuser.com. Если, конечно, «это приложение» - это приложение, которое вы написали сами. –

+0

Конечно, это все-таки связанный с программированием веб-сайт. Поэтому вопрос связан с программным обеспечением, которое я пишу. Следовательно, теги C#/winforms :) – coolmine

+1

Вы перемещаете только файл exe или всю папку? Я думаю, что если вы перемещаете всю папку, она должна оставаться неизменной. – Mzf

ответ

2

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

Если вы не имеете сильное имя, имя будет что-то вроде этого, и это изменится, если изменить путь к приложению (см маркер URL):

%appdata%\WindowsFormsApplication1\WindowsFormsApplication1._Url_3pei3cdnq3srqpjiwh1qnf12ncsp5c2w\1.0.0.0\user.config 

Если у вас есть сильное имя это будет что-то вроде этого, и это не изменится, потому что ваше приложение происхождения теперь идентифицируется, независимо от его текущее местоположение (см маркер StrongName):

%appdata%\WindowsFormsApplication1\WindowsFormsApplication1._StrongName_fe0ndyau2vlgeac4gmbg13u3q4jtyrqv\1.0.0.0\user.config 
+0

Это действительно удивительное решение , Никто не упомянул об этом на всех постах, которые я читал до сих пор, и он работает без каких-либо дополнительных изменений. Спасибо. – coolmine

0

От this blog post, относительно местоположения файла конфигурации:

Если вам необходимо сохранить настройки в другом месте по какой-то причине , рекомендуемый способ, чтобы написать свой собственный SettingsProvider.

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

+0

Это определенно возможно, но как вы будете повторно использовать текущий редактор параметров IDE Visual Studio и сгенерированный ассоциированный класс? Даже если вы пишете пользовательский SettingsProvider, вам все равно придется переписать довольно кучу кода для поддержки этого. –

+0

Это действительно работает, это был мой первый подход, но проблема начинается с того момента, когда вы начинаете использовать разные классы в настройках. Например, http://stackoverflow.com/a/11398536/1630928 страдает от классов Point/Size, и я уверен, что у него, вероятно, есть проблемы с еще несколькими, которые я еще не тестировал. Поэтому я предполагаю, что вам нужно будет написать довольно много кода и выполнить довольно много тестов, чтобы обеспечить функциональность по умолчанию, и даже тогда всегда есть вещи, которые вы не можете предсказать :) – coolmine