Member 14724878 Ответов: 3

Как прочитать содержимое файла .exe с помощью C#


привет.У меня есть exe-файл,созданный Borlandc, и я знаю, что хочу прочитать версию этого файла на C#. у меня есть 2 вопроса:
1)Как читать файл .exe?
2)Как выполнить поиск в содержимом файла .exe и найти некоторую деталь, например "version:[3.2.6]" ?
пожалуйста, помогите мне. большое спасибо.

Что я уже пробовал:

я не могу найти никакого решения для своего вопроса.пожалуйста, помогите мне.

3 Ответов

Рейтинг:
2

0x01AA

Это не простая задача.

Начните читать это VERSIONINFO ресурсов Win32-приложений, Майкрософт документы[^]

Самое трудное для вас будет то, что это нужно сделать в c# с помощью P/Invoke.

[Редактировать]
Похоже, что есть более простой способ, который работает в c# также для родного W32 exe: Класс FileVersionInfo (System.Диагностика) | Microsoft Docs[^]


Рейтинг:
2
Рейтинг:
0

OriginalGriff

Вы предполагаете, что номер версии будет существовать в виде строки, и это вполне возможно, даже не будет существовать - особенно в C, нет никаких "жестких и быстрых" правил для обработки номеров версий. В отличие от C#, где это часть сборки, в C это гораздо более свободная форма, и любая система нумерации версий полностью зависит от разработчика.

Таким образом, вы можете найти код C, который идет:

printf("Version: [%u.%u.%u]", vMajor, vMinor, vRev);
Или это может быть так
printf("Version: [3.2.6]");
Или даже
printf("Version: %s", revisuionInformation);
И это даже не должно быть одним и тем же от версии к версии!
Возможно даже, что текст "версия" хранится в таблице различных языковых слов для целей глобализации, а код, который использует его, находится за тысячи строк кода!

Так что "охота", хотя EXE-файл ищет его, в лучшем случае будет изворотливым директором.

Но... считайте EXE-файл в массив байтов:
byte[] file = File.readAllBytes(pathToExeFile);

И начните искать "версию" в цикле.
Это достаточно просто сделать, но имейте в виду, что это, вероятно, не даст вам ничего особенно полезного.


Member 14724878

большое спасибо.
да. В своем коде на языке Си я использовал "#define version [4.2.3]".
и знайте, что я хочу найти строку "[4.2.3] в моем файле .exe .
используя этот код : byte[] file = File.readAllBytes(pathToExeFile);
я должен искать символ за символом? как им пользоваться?
большое спасибо за ваш ответ.

OriginalGriff

- я должен искать символ за символом?"
Да - нет никакой "стандартной функции" для поиска строки в массиве байтов.
Поэтому преобразуйте строку поиска в массив байтов и начните искать ее внутри цикла.

Member 14724878

большое спасибо;я хочу сделать приложение, которое устанавливается в правом щелчке мыши в windows7(OS).
Когда вы открываете Мой компьютер и переходите в Главный каталог,а затем выбираете папку и щелкаете правой кнопкой мыши,затем показываете мое приложение в правом клике, затем открываете его и сообщаете мне путь к этой папке.
как я могу это сделать?в C#. Пожалуйста, дайте мне исходный код, который может сделать эту работу.

OriginalGriff

- Пожалуйста, дайте мне исходный код, который может выполнить эту работу."
Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

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

Member 14724878

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