Как изменить переменные файла .exe?

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

Я не на 100% уверен, что вы ищете, но передача значений в .exe без файла конфигурации может быть выполнена путем передачи значений в аргументе командной строки.

Amit 06.04.2018 04:45

@ Примите разумные решения ... Где вся развлекательная ценность перекомпиляции exe на лету или взлома значений в памяти :)

Alexei Levenkov 06.04.2018 04:46

Проголосовать за аргументы командной строки и ярлык.

TheGeneral 06.04.2018 04:56

@Kreator FYI, если ваш переносимый .exe может читать данные из Интернета (с определенного URL-адреса), вы всегда можете обновить значения на этом URL-адресе, поэтому ваш переносимый .exe получит измененные значения без повторной компиляции!

Amit 06.04.2018 04:59

@Amit Извини, я действительно не знала этого. Большое спасибо!

Kreator 06.04.2018 18:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
1 605
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы официально ответить на вопрос.

Вы можете конвертировать сборку в IL, искать и заменять и перекомпилировать. Однако, если вы создаете это приложение, вам действительно следует очень тщательно рассмотреть необходимость и вариант использования.

Если вам нужно просто изменить поведение приложения, у вас есть множество вариантов.

  • Реестр (можно сделать удаленно)
  • Файл конфигурации (хотя вы это исключили)
  • Вы можете использовать метод входа в систему
    • Wcf например
    • Active Directory
    • Сетевая БД
  • Перестройте свое приложение для этих пользователей
  • Msbuild с пакетным файлом для настройки чего-либо
  • Скрипт предварительной сборки

Если вы действительно коварны, вы «могли бы» отследить смещение int и настроить его. Однако это кажется очень ненадежным

Или, если вы действительно настроены на это, просмотрите следующие и связанные вопросы

Изменить Emdeded String в C# скомпилированном exe

Можно ли добавить / удалить / изменить встроенный ресурс в .NET DLL?

Обновлять от Бен Фойгт Комментарии

Win32 Resources can be changed after being embedded in an EXE. .NETSystem.Resources can only be changed before embedding. C# applications are compatible with both kinds, but the distinction is very important The The necessary function is UpdateResource

Вы можете встроить ресурсы, а затем изменить их без перекомпиляции.

Ben Voigt 06.04.2018 04:26

После небольшого исследования я должен уточнить - ресурсы Win32 могут быть изменены после встраивания в EXE. .NET System.Resources можно изменить только перед встраиванием. Приложения C# совместимы с обоими типами, но различие очень важно.

Ben Voigt 06.04.2018 04:30

Необходимая функция - UpdateResource Пример C++: msdn.microsoft.com/en-us/library/windows/desktop/…

Ben Voigt 06.04.2018 04:31

@TheGeneral Большое спасибо за подробный и полный ответ!

Kreator 06.04.2018 18:29

Обычно вы можете присоединиться к .exe, не нарушая его, а затем прочитать данные после выполнения.

См .: добавление данных в exe

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

Ben Voigt 06.04.2018 04:36

Другие вопросы по теме