Я хочу, чтобы моя программа на Visual C# позволяла пользователю создавать переносимый файл .exe для запуска на компьютере другого пользователя, при этом portabe .exe получает значения, введенные первым пользователем. Я не хочу использовать файл конфигурации или любой другой файл для хранения входных значений для последующего чтения, потому что я хочу, чтобы .exe был одним файлом. У меня есть основная и вторая программа (будущий переносимый исполняемый файл) как разные проекты на одном решении. Есть ли способ изменить значения переносимого .exe или новую программу нужно компилировать на лету?
@ Примите разумные решения ... Где вся развлекательная ценность перекомпиляции exe на лету или взлома значений в памяти :)
@Kreator Передача аргументов командной строки из C# во внешний exe поможет?
Проголосовать за аргументы командной строки и ярлык.
@Kreator FYI, если ваш переносимый .exe может читать данные из Интернета (с определенного URL-адреса), вы всегда можете обновить значения на этом URL-адресе, поэтому ваш переносимый .exe получит измененные значения без повторной компиляции!
@Amit Извини, я действительно не знала этого. Большое спасибо!





Чтобы официально ответить на вопрос.
Вы можете конвертировать сборку в IL, искать и заменять и перекомпилировать. Однако, если вы создаете это приложение, вам действительно следует очень тщательно рассмотреть необходимость и вариант использования.
Если вам нужно просто изменить поведение приложения, у вас есть множество вариантов.
Если вы действительно коварны, вы «могли бы» отследить смещение int и настроить его. Однако это кажется очень ненадежным
Или, если вы действительно настроены на это, просмотрите следующие и связанные вопросы
Изменить Emdeded String в C# скомпилированном exe
Можно ли добавить / удалить / изменить встроенный ресурс в .NET DLL?
Обновлять от Бен Фойгт Комментарии
Win32 Resources can be changed after being embedded in an EXE. .NET
System.Resourcescan only be changed before embedding. C# applications are compatible with both kinds, but the distinction is very important The The necessary function is UpdateResource
Вы можете встроить ресурсы, а затем изменить их без перекомпиляции.
После небольшого исследования я должен уточнить - ресурсы Win32 могут быть изменены после встраивания в EXE. .NET System.Resources можно изменить только перед встраиванием. Приложения C# совместимы с обоими типами, но различие очень важно.
Необходимая функция - UpdateResource Пример C++: msdn.microsoft.com/en-us/library/windows/desktop/…
@TheGeneral Большое спасибо за подробный и полный ответ!
Обычно вы можете присоединиться к .exe, не нарушая его, а затем прочитать данные после выполнения.
См .: добавление данных в exe
Да, и использование функций ресурсов Win32, созданных для этой цели, и использование собственных функций вполне возможно. (Функции ресурсов Win32 предоставляют вам каталог / каталог, чтобы ресурсы можно было читать и записывать по имени ... но использование существующей схемы также означает, что ваши данные могут быть найдены с помощью существующих инструментов)
Я не на 100% уверен, что вы ищете, но передача значений в .exe без файла конфигурации может быть выполнена путем передачи значений в аргументе командной строки.