Рейтинг:
1
#realJSOP
Попробуйте указать полный путь к файлу, для которого вы хотите получить информацию о версии. Кроме того, поместите блок try/catch вокруг вашего кода, чтобы вы могли видеть, что на самом деле является ошибкой. Например:
FileVersionInfo versionInfo = null;
string fileVersion = string.Empty;
string productVersion = string.Empty;
string productName = string.Empty;
try
{
versionInfo = FileVersionInfo.GetVersionInfo(@"c:\some folder\ProgA.exe");
fileVersion = versInfo.FileVersion;
productVersion = versInfo.ProductVersion;
productName = versInfo.ProductName;
}
catch (Exception ex)
{
// if an exception is thrown, you can inspect it here by
// setting a breakpoint on either of the curly braces
}
[no name]
Вам нужно будет экранировать строку пути к файлу.
#realJSOP
Ой-исправил. Это то, что я получаю за ввод кода непосредственно в Редактор вместо того, чтобы использовать VS, а затем копировать/вставлять...
roarkrsp
Мой исходный код и код, предоставленный Джоном Симмонсом, дают ту же информацию.
То
необязательный параметр
свойство ProductVersion
значение ProductName
все они пусты ("").
Когда я меняю имя файла на другое существующее имя программы, оно дает правильную информацию. Так что это, должно быть, прога, которая не является правильной в некотором роде. Но почему Проводник Windows может получить правильную информацию?
Поскольку проводник Windows способен получить правильную информацию, как я могу использовать те же методы, которые использует Проводник Windows для получения правильной информации?
roarkrsp
Это, как я сделал свой ресурс.RC в мой код прога для Win32
// // Версия
//
// Версия
//
VS_VERSION_INFO VERSIONINFO
Необязательный параметр 4,0,0,0
Версия продукта 4.0,0,0,0
FILEFLAGSMASK 0x3fL
после условной
FILEFLAGS 0x1L
ещё
FILEFLAGS 0x0L
за endif
FILEOS 0x40004L
Тип файла 0x1L
FILESUBTYPE 0x0L
НАЧАТЬ
Блок " StringFileInfo"
НАЧАТЬ
Блок "040904b0"
НАЧАТЬ
Значение "CompanyName", " abcsoftware"
Значение "FileDescription", " драйвер программного обеспечения для Xbong"
// Значение "FileVersion", " 4.0.0.0"
Значение "InternalName", "ProgA.exe"
Значение "LegalCopyright", " Copyright (C) 2016 abcsoftware"
Значение "OriginalFilename", "ProgA.exe"
Значение "ProductName", " ProgA"
Значение "ProductVersion", "4.0.0.0"
КОНЕЦ
КОНЕЦ
Блок " VarFileInfo"
НАЧАТЬ
Значение "перевод", 0x409, 1200
КОНЕЦ
КОНЕЦ
Проводник Windows может сообщить свою информацию правильно, щелкнув правой кнопкой мыши и перейдя к свойствам/деталям, но не к моему коду в ProgB
#realJSOP
Вы действительно запускаете ProgA, когда делаете это?
#realJSOP
Кроме того, почему вы вообще возитесь с информацией о версии файла в rc-файле? Компилятор обрабатывает все это за вас.
roarkrsp
Нет, ProgA не работает, это программа, неактивная в папке, но мне нужно получить ее свойства при запуске ProgB.
#realJSOP
Ну, я понятия не имею, почему это не работает и чего вы ожидаете от "соответствия". IO просто попробовал это в приложении, которое я пишу прямо сейчас, и данные FileVersionInfo, которые я получаю, совпадают с тем, что возвращает Проводник Windows (проводник не возвращает все свойства, кстати, но те, которые он возвращает, совпадают просто отлично).
roarkrsp
Именно так я давным-давно реализовал настройки версии кода. С тех пор я им пользуюсь, и он прекрасно работает. Может быть, это и есть причина моих проблем, но я до сих пор не понимаю, почему проводнику Windows удается получить правильную информацию о свойстве, а не мой код?
#realJSOP
Вы все еще не сказали того, что неправильно (это я видел).
roarkrsp
Как указано в моем первом вопросе, я получаю информацию ниже, когда ищу свойства ProgA с помощью Проводника Windows (щелкните правой кнопкой мыши и свойства / детали)
Драйвер описание файла прога
Тип Приложения
Файл версия 4.0.0.0
Наименование товара прога
Версия 4.0.0.0
Программное обеспечение авторские права АВС
Размер 653 КБ
Дата изменения 4/19/2016 11: 30 вечера
Язык Английский (США)
Исходное имя файла прога
Но при использовании кода, который у меня был изначально, и предложенного вами кода я ничего не получаю
информация о недвижимости.
Вот что я получаю (от отладки в Visual Studio)
versInfo {система.Диагностика.FileVersionInfo} Система.Диагностика.FileVersionInfo
Комментарии "" строка
Название организации "" строку
FileBuildPart 0 int
FileDescription "" строка
FileMajorPart 4 int
FileMinorPart 0 int
+ Имя файла ' versInfo.FileName 'выбросил исключение типа' System.Строковое значение' {система.ArgumentException}
FilePrivatePart 0 int
FileVersion "" строка
Внутреннее_имя "" строку
Атрибут отладчик значение false типа bool
IsPatched false bool
IsPreRelease false bool
IsPrivateBuild false bool
IsSpecialBuild false bool
Язык" английский (Соединенные Штаты) " строка
LegalCopyright "" строка
LegalTrademarks "" строка
OriginalFilename "" строка
PrivateBuild "" строка
ProductBuildPart 0 int
ProductMajorPart 4 int
ProductMinorPart 0 int
ProductName "" строка
ProductPrivatePart 0 int
ProductVersion "" строка
SpecialBuild "" строка
Но, используя код, но просто меняя имя файла на другую программу, код сообщает о правильных свойствах.
roarkrsp
Может быть, мне стоит попытаться позволить Visual Studio справиться с управлением версиями. Но как мне это сделать? Есть ли вариант, который я должен установить, прежде чем строить?
#realJSOP
Попробуйте сделать чистое / полное решение для progA. После этого у меня закончились идеи.