Environment Variables в Xamarin Studio или как хранить переменные в .exe?

Рейтинг: 1Ответов: 1Опубликовано: 18.01.2015

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

После получасового гугления я наткнулся на такую вещь, как Environment Variables и две функции:

Environment.GetEnvironmentVariable ();
Environment.SetEnvironmentVariable ();

По адресу Project > Project Options > Run > General я нашел, где можно прописать эти самые Environment Variables. Мне даже удалось их использовать, записывать в них значения, считывать их... Но вот беда, то ли я чего-то не понял, то ли в них нельзя хранить данные, как я хочу. После выключения приложения данные теряются. Какой вообще тогда в них смысл? :<

В общем, основной вопрос: как хранить переменные в .exe?

* Спустя несколько часов *

В .exe хранить ничего нельзя - с этим я смирился.

Environment Variables - вообще не то, что нужно. "Переменные среды" или "переменные окружения" - называйте как хотите, но в общем это оказалась какой-то магией, неподвластной моему уму. Поэтому я также смирился с тем, что они мне не подойдут.

Settings, что мне предложили, - неплохой вариант. Я очень долго мучался, чтобы суметь их использовать. Как оказалось, я не добавил для проекта в папку References файл System.Configuration.dll. Потом встал выбор: использовать appSettingsили userSettings, и рекомендовалось именно последнее. Но я лишь понял, как работать с appSettings, а с userSettings все оказалось сложнее. В частности потому, что в Xamarin Studio нельзя автоматически создать нужный файлик (для appSettings - можно, для userSettings - нет), поэтому мне приходилось вручную его создавать и разбираться, какая структура у него должна быть (и вроде разобрался, а все равно ничего не работало). Вдобавок ко всему, этот файл с "единственным незначительным данным" по умолчанию хранится рядом с .exe файлом. А чтобы настроить, чтобы он хранился где-нибудь в пользовательских папках APPDATA или типа того - это нужно еще больше заморочиться. И плюс к этому, файл, как я понял, остался бы после удаления программы (нужен инсталлятор/деинсталлятор для таких дел)...

ТАК ВОТ... Зачем это всё! :D Я просто отказался от этого "маленького незначительного данного". Обхожусь теперь без него. :)

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

Так что всем спасибо за помощь. :P

Ответы

▲ 1Принят

дополнительный файл для одной переменной? ха-ха

Вероятно вы никогда не писали значительных проектов. Да, именно файл для одной переменной. Сегодня переменная одна, завтра их будет пять, а послезавтра сто двадцать пять. А там? возможно вообще база понадобится - любое ПО имеет свойство разрастаться под напором предъявляемых к нему требований.

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

Обновление:

Не стану говорить, что уверен абсолютно, однако на 99% - этого сделать нельзя. Exe-файлы, насколько я знаю, являются неизменяемыми - операционная система блокирует их при запуске.

Точнее будет даже сказать даже так - может быть (именно может быть) модифицировать exe можно путем всяческих хитрых колдунств с низкоуровневым программированием, для чего, возможно, даже придется привлекать ассемблер (не самый лучший вариант для программы на C#, не так ли?). Но загвоздка тут в том, что даже если это и возможно, результат, который вы хотите получить, совершенно не стоит затраченных на него средств.

Еще раз хочу отметить - наиболее правильным средством храннения настроек является хранение их в конфигурационных файлах - app.config или web.config. Именно этот способ поддерживается фреймворком и официально рекомендуется. А сомнения "эстетического харкатера" - это, поверьте, чепуха.