Как изменить версию программы windows

There are multiple tools, mentioned by many great answers, I’m going to pick one.

Resource Hacker

I downloaded latest version (5.1.7) from [AngusJ]: Resource Hacker. All the needed information can be found on that page (command line options, scripts, …). In the following walkthrough I’m going to operate on 2 executables (lab rats) which (for obvious reasons) I’ve copied in my cwd:

  • ResourceHacker.exe: I thought it would be interesting to operate on itself
  • cmake.exe: random executable with no Version Info set (part of v3.6.3 installation on my machine)

Before going further, I want to mention that ResourceHacker has a funny terminal output, and the the following copy / paste fragments might generate a bit of confusion.

1. Setup

This is more like a preliminary step, to get acquainted with the environment, to show there’s no funky business going on, …

e:\Work\Dev\StackOverflow\q000284258> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***

[prompt]> dir
 Volume in drive E is Work
 Volume Serial Number is 3655-6FED

 Directory of e:\Work\Dev\StackOverflow\q000284258

2019-01-28  20:09    <DIR>          .
2019-01-28  20:09    <DIR>          ..
2016-11-03  09:17         5,413,376 cmake.exe
2019-01-03  02:06         5,479,424 ResourceHacker.exe
2019-01-28  20:30               496 ResourceHacker.ini
               3 File(s)     10,893,296 bytes
               2 Dir(s)  103,723,261,952 bytes free

[prompt]> set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin

[prompt]> .\cmake --help >nul 2>&1

[prompt]> echo %errorlevel%
0

[prompt]> .\ResourceHacker.exe -help

[prompt]>

==================================
Resource Hacker Command Line Help:
==================================

-help             : displays these abbreviated help instructions.
-help commandline : displays help for single commandline instructions
-help script      : displays help for script file instructions.




[prompt]> echo %errorlevel%
0

As seen, the executables are OK, they run fine, and here’s how their Details (that we care about) look like:

Img0-Initial

2. Resources

Resource files are text files that contain resources. A resource (simplified) has:

  • Name
  • Type
  • Value

For more details check [MS.Docs]: About Resource Files. There are many tools (mentioned in existing answers) that facilitate resource file editing like:

  • VStudio creates a default one when starting a new project
  • One can create such a file manually
  • But, since it’s about Resource Hacker, and:

    • It is able to extract resources from an existing executable
    • It has resources embedded in it (as shown in the previous picture)

    I’m going to use it for this step (-action extract)

Next, In order for a resource to be embedded into an .exe (.dll, …) it must be compiled to a binary form, which fits into the PE format. Again, there are lots of tools who can achieve this, but as you probably guessed I’m going to stick to Resource Hacker (-action compile).

[prompt]> :: Extract the resources into a file
[prompt]> .\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con

[prompt]>

[28 Jan 2019, 20:58:03]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHacker.exe  -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Save    : e:\Work\Dev\StackOverflow\q000284258\sample.rc


Success!

[prompt]> :: Modify the resource file and set our own values
[prompt]>
[prompt]> :: Compile the resource file
[prompt]> .\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con

[prompt]>

[28 Jan 2019, 20:59:51]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHacker.exe  -open .\sample.rc -save .\sample.res -action compile -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\sample.rc
Save    : e:\Work\Dev\StackOverflow\q000284258\sample.res

Compiling: e:\Work\Dev\StackOverflow\q000284258\sample.rc
Success!

[prompt]> dir /b
cmake.exe
ResourceHacker.exe
ResourceHacker.ini
sample.rc
sample.res

In your case saving and editing the resource file won’t be necessary, as the file will already be present, I just did it for demonstrating purposes. Below it’s the resource file after being modified (and thus before being compiled).

sample.rc:

1 VERSIONINFO
FILEVERSION 3,1,4,1592
PRODUCTVERSION 2,7,1,8
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
    BLOCK "040904E4"
    {
        VALUE "CompanyName", "Cristi Fati\0"
        VALUE "FileDescription", "20190128 - SO q000284258 demo\0"
        VALUE "FileVersion", "3.1.4.1592\0"
        VALUE "ProductName", "Colonel Panic\0"
        VALUE "InternalName", "100\0"
        VALUE "LegalCopyright", "(c) Cristi Fati 1999-2999\0"
        VALUE "OriginalFilename", "ResHack\0"
        VALUE "ProductVersion", "2.7.1.8\0"
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x0409 0x04E4  
}
}

3. Embed

This will also be performed by Resource Hacker (-action addoverwrite). Since the .exes are already copied I’m going to edit their resources in place.

[prompt]> .\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

[prompt]>

[28 Jan 2019, 21:17:19]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHacker.exe  -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
Save    : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res

  Added: VERSIONINFO,1,1033

Success!

[prompt]> copy ResourceHacker.exe ResourceHackerTemp.exe
        1 file(s) copied.

[prompt]> .\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

[prompt]>

[28 Jan 2019, 21:19:29]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHackerTemp.exe  -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Save    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res

  Modified: VERSIONINFO,1,1033

Success!

[prompt]> del /f /q ResourceHackerTemp.*

[prompt]> dir
 Volume in drive E is Work
 Volume Serial Number is 3655-6FED

 Directory of e:\Work\Dev\StackOverflow\q000284258

2019-01-28  21:20    <DIR>          .
2019-01-28  21:20    <DIR>          ..
2016-11-03  09:17         5,414,400 cmake.exe
2019-01-03  02:06         5,479,424 ResourceHacker.exe
2019-01-28  21:17               551 ResourceHacker.ini
2019-01-28  20:05             1,156 sample.rc
2019-01-28  20:59               792 sample.res
               5 File(s)     10,896,323 bytes
               2 Dir(s)  103,723,253,760 bytes free

As seen, I had to d a little trick (gainarie) as I can’t (at least I don’t think I can) modify the .exe while in use.

4. Test

This is an optional phase, to make sure that:

  • The executables still work (they weren’t messed up in the process)
  • The resources have been added / updated
[prompt]> .\cmake --help >nul 2>&1

[prompt]> echo %errorlevel%
0

[prompt]> .\ResourceHacker.exe -help

[prompt]>

==================================
Resource Hacker Command Line Help:
==================================

-help             : displays these abbreviated help instructions.
-help commandline : displays help for single commandline instructions
-help script      : displays help for script file instructions.




[prompt]> echo %errorlevel%
0

And their Details:

Img1-Final


Как изменить версию приложения в списке установленных программ

От:

SaZ

 
Дата:  19.04.13 09:46
Оценка:

Приложение (кросс-платформенное) устанавливается на windows через инсталлятор. Внутри приложения есть собственный механизм автоматических обновлений. После обновления программы, в списке установленных программ (win7: пуск — панель управления — программы и компоненты) версия программы остаётся старой.

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

http://rsdn.org/tools/member.aspx?id=SaZ


Re: Как изменить версию приложения в списке установленных программ

От:

okman

Беларусь

https://searchinform.ru/
Дата:  19.04.13 09:50
Оценка:

2 (1)

Здравствуйте, SaZ, Вы писали:

SaZ>Каким образом можно программно изменить этот параметр не прибегая к редактированию реестра (т.к. нужно повышение привилегий в UAC, что нежелательно)?

Скорее всего, никак.
Ну или добавить разрешение на запись в соответствующий ключ реестра под
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall


Re[2]: Как изменить версию приложения в списке установленных программ

От:

SaZ

 
Дата:  19.04.13 10:37
Оценка:

Здравствуйте, okman, Вы писали:

O>Скорее всего, никак.

O>Ну или добавить разрешение на запись в соответствующий ключ реестра под
O>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Спасибо, я думал списком установленных программ можно как-то управлять, кроме как руками, через реестр. Будем запрашивать повышение привелегий для апдейтера, хотя это нежелательно. По-умолчанию программа ставится в текущий каталог пользователя, куда доступ, разумеется, есть. И апдейт выполнялся нормально, с текущими привилегиями. Первый баг который нашли — это то, что при обновлении проги не обновлялась её версия в списке установленных программ. Ну и отсюда вытекли баги при явной установке программы в Program Files.

Может подскажите какие-то общие ссылки по теме добавления/удаления/модификации программ, если такие есть, а то плохо гуглится?

http://rsdn.org/tools/member.aspx?id=SaZ


Re[3]: Как изменить версию приложения в списке установленных программ

От:

okman

Беларусь

https://searchinform.ru/
Дата:  19.04.13 11:13
Оценка:

2 (1)

Здравствуйте, SaZ, Вы писали:

SaZ>Спасибо, я думал списком установленных программ можно как-то управлять, кроме как руками, через реестр.

Управлять — нет, но можно перечислять, например:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa370101(v=vs.85).aspx

SaZ>Будем запрашивать повышение привелегий для апдейтера, хотя это нежелательно.

Почему нежелательно ?

SaZ>По-умолчанию программа ставится в текущий каталог пользователя, куда доступ, разумеется, есть. И апдейт выполнялся нормально, с текущими привилегиями. Первый баг который нашли — это то, что при обновлении проги не обновлялась её версия в списке установленных программ. Ну и отсюда вытекли баги при явной установке программы в Program Files.

Старые версии Google Chrome работали по такой же схеме. Потом благоразумно от этого отказались.

SaZ>Может подскажите какие-то общие ссылки по теме добавления/удаления/модификации программ, если такие есть, а то плохо гуглится?

Например, из раздела «Windows Installer» в MSDN:
http://msdn.microsoft.com/en-us/library/windows/desktop/cc185688(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa372860(v=vs.85).aspx


Re[4]: Как изменить версию приложения в списке установленных программ

От:

SaZ

 
Дата:  19.04.13 12:25
Оценка:

Здравствуйте, okman, Вы писали:

SaZ>>Будем запрашивать повышение привелегий для апдейтера, хотя это нежелательно.

O>Почему нежелательно ?
Потому что апдейты важно доставлять конечным пользователям, но пользователи могут работать (в большинстве случаев) под ограниченной учётной записью.

В общем, тут и кроется ответ на исходную проблему (бизнес аналитики не правильно рассмотрели проблему) — если уж поставили приложение в папку Program Files, то пользователь, использующий приложение должен иметь соответствующие привилегии на запись в эту папку. Хотя все данные и конфиги хранятся отдельно. Осталось написать функцию, которая проверяет и в случае необходимости запрашивает повышение привилегий.
В идеале, конечно, стоит обзавестись отдельным сервисом (для win сборки), который будет отвечать за апдейты, но пока начальство не даст добро на эту задачу. Поэтому приложение у нас — само себе апдейтер.

O>Старые версии Google Chrome работали по такой же схеме. Потом благоразумно от этого отказались.

Сейчас, я так понимаю, все апдейты гугла на сервисах. Глянул у себя в диспетчере задач — там есть сервис gupdate, но он остановлен. Интересно, в каких случаях он запускается (когда есть апдейты?) и может ли он быть запущен из-под ограниченной учётки.
В общем, придётся изучать написание и работу сервисов. Наше приложение использует Qt, я видел в Qt соответствующие классы, облегчающие это дело. Ещё раз спасибо

Попутно возник вопрос (пока ещё не гуглил) — есть ли API, позволяюзее определить, нужно ли приложению подымать свои привилегии для записи в ту или иную папку / ветку реестра? Или стоит попробовать что-то записать, и в случае ошибки запрашивать повышение привилегий?

http://rsdn.org/tools/member.aspx?id=SaZ


Re[5]: Как изменить версию приложения в списке установленных программ

От:

okman

Беларусь

https://searchinform.ru/
Дата:  19.04.13 18:33
Оценка:

14 (3)

Здравствуйте, SaZ, Вы писали:

SaZ>>>Будем запрашивать повышение привелегий для апдейтера, хотя это нежелательно.

O>>Почему нежелательно ?

SaZ>Потому что апдейты важно доставлять конечным пользователям, но пользователи могут работать (в большинстве случаев) под ограниченной учётной записью.

Это понятно. Но ведь ограниченные учетки на то и ограниченные, чтобы кто ни попадя не мог без
разбора ставить, обновлять и удалять программы, писать в системные папки, разделы реестра и т.п.
Ведь обслуживание софта — это забота администратора, а не пользователей. Разве нет ?

А в схеме с установкой софта в профиль пользователя есть очень серъезная уязвимость:
всякий, кто имеет доступ на запись в соответствующие папки, может простым патчем или заменой
exe-файлов запустить произвольный код с правами пользователя. И это будет замаскировано под
деятельность приложения, известного пользователю, которому он доверяет. Так вот на компьютер
ставят «жучков», а потом уводят пароли, номера кредиток и другую конфиденциальную информацию.

SaZ>В общем, тут и кроется ответ на исходную проблему (бизнес аналитики не правильно рассмотрели проблему) — если уж поставили приложение в папку Program Files, то пользователь, использующий приложение должен иметь соответствующие привилегии на запись в эту папку.

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

SaZ>Хотя все данные и конфиги хранятся отдельно.

Да, данным приложения и конфигурациям самое место в application data и в соответствующих
разделах реестра, таким как HKEY_CURRENT_USER\Software.

SaZ>Осталось написать функцию, которая проверяет и в случае необходимости запрашивает повышение привилегий.

Как Вы себе это представляете ? А если нужно обновить несколько сотен файлов ?
Это ведь придется все их перечислить, запрашивая дескрипторы безопасности и сверяя уровень доступа, а
еще учитывать текущего владельца, наличие привилегий… Проще уж сразу запросить права и все.

SaZ>В идеале, конечно, стоит обзавестись отдельным сервисом (для win сборки), который будет отвечать за апдейты, …

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

SaZ>Сейчас, я так понимаю, все апдейты гугла на сервисах. Глянул у себя в диспетчере задач — там есть сервис gupdate, но он остановлен. Интересно, в каких случаях он запускается (когда есть апдейты?) и может ли он быть запущен из-под ограниченной учётки.

Честно говоря, без понятия. Я подобную дрянь вычищаю сразу после ее установки. Матерясь.

SaZ>В общем, придётся изучать написание и работу сервисов. Наше приложение использует Qt, я видел в Qt соответствующие классы, облегчающие это дело. Ещё раз спасибо

Не за что. Я в этой теме в основном занимаюсь поливанием грязью.
Службы-апдейтеры — объект моей (и не только моей) лютой ненависти, не знаю ни одного пользователя,
кому бы они были по душе. А как Вам, кстати ?

SaZ>Попутно возник вопрос (пока ещё не гуглил) — есть ли API, позволяюзее определить, нужно ли приложению подымать свои привилегии для записи в ту или иную папку / ветку реестра? Или стоит попробовать что-то записать, и в случае ошибки запрашивать повышение привилегий?

Не нужно, это извращение.
В Windows есть набор общепринятых норм «морали». Изменять системные объекты (ветка HKEY_LOCAL_MACHINE, папки
windows, System32, Program Files, службы, системные процессы, задания планировщика, правила фаерволла и т.п.)
могут лишь система и администраторы, у остальных по умолчанию доступ только на чтение. Пользовательские
объекты (HKEY_CURRENT_USER, папки users\имя, application data и т.п.) можно свободно читать и изменять всем,
кроме других пользователей. Для записи в Program Files нужно иметь системные или администраторские права, а
для записи в Application Data нужно быть соответствующим юзером. Если юзер сам поменял права в Application
Data и теперь приложение не может установиться туда, то это проблема юзера, а не приложения. В этом случае
лучше просто опознать код ошибки (0xC0000005, ACCESS DENIED), показать юзеру соответствующий диалог и
спокойно завершить работу, чем пытаться что-то проверять и подстраиваться под всевозможные «рифы».


Re: Как изменить версию приложения в списке установленных программ

От:

BurningInside

Россия

 
Дата:  20.04.13 03:00
Оценка:

Здравствуйте, SaZ, Вы писали:

SaZ>Приложение (кросс-платформенное) устанавливается на windows через инсталлятор. Внутри приложения есть собственный механизм автоматических обновлений. После обновления программы, в списке установленных программ (win7: пуск — панель управления — программы и компоненты) версия программы остаётся старой.


SaZ>Каким образом можно программно изменить этот параметр не прибегая к редактированию реестра (т.к. нужно повышение привилегий в UAC, что нежелательно)?

И на последок. Не пишите версию программы в списке установленных. Или оставляйте как есть.


Re[6]: Как изменить версию приложения в списке установленных программ

От:

SaZ

 
Дата:  22.04.13 09:58
Оценка:

Здравствуйте, okman, Вы писали:

O>Это понятно. Но ведь ограниченные учетки на то и ограниченные, чтобы кто ни попадя не мог без

O>разбора ставить, обновлять и удалять программы, писать в системные папки, разделы реестра и т.п.
O>Ведь обслуживание софта — это забота администратора, а не пользователей. Разве нет ?
В нашем случае считается, что у пользователя достаточно навыков, чтобы выполнить автоапдейт софта. Даже под ограниченной учёткой. Всё, в общем-то работает как надо, за исключением неприятного бага, о котором я писал выше: при использовании нашего собственного апдейтера не получается пропатчить версию нашей программы в списке установленных приложений.

O>А в схеме с установкой софта в профиль пользователя есть очень серъезная уязвимость:

O>всякий, кто имеет доступ на запись в соответствующие папки, может простым патчем или заменой
O>exe-файлов запустить произвольный код с правами пользователя. И это будет замаскировано под
O>деятельность приложения, известного пользователю, которому он доверяет. Так вот на компьютер
O>ставят «жучков», а потом уводят пароли, номера кредиток и другую конфиденциальную информацию.
В общем случае согласен, но кастомер в такую параною не впадает — защита компов от внедрения любого вредоносного п/о — исключительно проблема кастомера.

SaZ>>Осталось написать функцию, которая проверяет и в случае необходимости запрашивает повышение привилегий.

O>Как Вы себе это представляете ? А если нужно обновить несколько сотен файлов ?
O>Это ведь придется все их перечислить, запрашивая дескрипторы безопасности и сверяя уровень доступа, а
O>еще учитывать текущего владельца, наличие привилегий… Проще уж сразу запросить права и все.
Костыль: проверяем, есть ли права на запись в нужную папку/ветку реестра. Если нет — рестартим себя с повышенными привилегиями. В общем, мы тоже пришли к выводу, что апдейтер будет запускаться только с правами админа.

O>Службы-апдейтеры — объект моей (и не только моей) лютой ненависти, не знаю ни одного пользователя,

O>кому бы они были по душе. А как Вам, кстати ?
По религиозным причинам прибиваю все Java-updater-ы. А на остальные левые сервисы (типа гугл апдейтера) как-то не обращаю внимания. Рабочий комп достаточно шустрый. Пользуюсь только проверенным софтом (всё лицензионное или очень популярный опен-сорс, типа git-а). Единственное — настраиваю автоапдейты так, чтобы сначала был запрос о том, стоит ли выкачивать обновления.

O>…

O>В Windows есть набор общепринятых норм «морали». Изменять системные объекты (ветка HKEY_LOCAL_MACHINE, папки
O>windows, System32, Program Files, службы, системные процессы, задания планировщика, правила фаерволла и т.п.)
O>могут лишь система и администраторы…
Так и напишем в мануале .

http://rsdn.org/tools/member.aspx?id=SaZ


Re[3]: Как изменить версию приложения в списке установленных программ

От:

squid_etc

 
Дата:  22.04.13 14:14
Оценка:

Здравствуйте, SaZ, Вы писали:

SaZ>Может подскажите какие-то общие ссылки по теме добавления/удаления/модификации программ, если такие есть, а то плохо гуглится?

я делал так: в инсталле делал проверку на установленность программы на оси(проверкой наличия переменной с директорией установки в реестре), если программа есть — то инсталл сам запускает анинсталл и ждёт пока он выполнится — после выполнения анинсталла — инстал продолжает установку новой версии. такие фокусы писал на NSIS и SetupFactory.
при приходжении уведомления о наличии новой версии — прога сама качает инсталл новой версии с сервака и запускает обычный инсталл. в сам инсталл можно добавить фичу, чтобы убивался процесс программы при первом клике кнопки нэкст в визарде инсталла.

всё )


Re[7]: Как изменить версию приложения в списке установленных программ

От:

CoolCmd

Россия

 
Дата:  03.05.13 07:35
Оценка:

Здравствуйте, SaZ, Вы писали:

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

если я правильно понял твою проблему, то используй
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
вместо
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
в этот ключ могут писать все Authenticated Users. это если прога устанавливается в профиль пользователя. если в program files — то используй HKEY_LOCAL_MACHINE как и раньше.

PS
единственное правильное автообновление — это когда им занимается операционная система. я не понимаю, почему мелкософт по сих пор этого не сделал.

простите, я убил небо

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

Формат DOCX, используемый в программах Microsoft Word, имеет разные версии, которые могут привести к непредвиденным проблемам совместимости при работе с другими пользователями. Если вы хотите изменить версию файла Word, в этой статье мы расскажем вам, как это сделать.

Существует несколько способов изменить версию файла Word. Один из них — использование функции «Сохранить как» в самой программе Word. Для этого откройте ваш документ в Word, затем перейдите во вкладку «Файл» и выберите «Сохранить как». В открывшемся окне выберите нужный формат файла, например, «Word 97-2003» или «Word 2016». После этого нажмите «Сохранить» и ваш файл Word будет сохранен в выбранном формате.

Если у вас возникли проблемы совместимости при открытии файла Word в других программах или версиях Word, то вы можете воспользоваться специализированными онлайн-сервисами для изменения версии файла. Одним из таких сервисов является «Конвертер форматов». Для использования этой услуги загрузите ваш файл Word на сайт, выберите нужный формат и нажмите кнопку «Конвертировать». В результате, вы получите файл с новой версией, который можно скачать на свой компьютер.

Изменение версии файла Word может быть полезным при обмене документами с другими пользователями или если вы столкнулись с проблемами при открытии файлов в других программах. Следуя вышеуказанным инструкциям, вы сможете легко изменить версию файла Word и избежать возможных несовместимостей.

Содержание

  1. Откройте файл Word для изменения версии
  2. Найдите вкладку «Файл» в верхней панели меню
  3. В меню выберите опцию «Сохранить как» и далее «Другие форматы»

Откройте файл Word для изменения версии

Шаг 1: Найдите на вашем компьютере файл Word, который вы хотите изменить. Обычно файлы Word имеют расширение «.docx» или «.doc».

Шаг 2: Щелкните дважды на файле Word, чтобы открыть его в программе Microsoft Word.

Шаг 3: Если у вас установлена другая программа для открытия файлов Word (например, LibreOffice или Google Docs), щелкните правой кнопкой мыши на файле, выберите «Открыть с помощью» и выберите Microsoft Word из списка программ.

Шаг 4: После открытия файла Word в программе Microsoft Word вы сможете внести необходимые изменения в текст, форматирование и другие элементы документа.

Шаг 5: После внесения изменений сохраните файл Word, нажав на кнопку «Сохранить» или используя комбинацию клавиш Ctrl+S.

Шаг 6: Файл Word будет автоматически сохранен с новой версией, и он будет доступен в том же формате и с тем же расширением, что и ранее.

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

Найдите вкладку «Файл» в верхней панели меню

Чтобы изменить версию файла Word, первым делом необходимо открыть документ в программе Microsoft Word. В верхней панели меню, расположенной сверху на экране, найдите вкладку «Файл». Она находится слева от вкладок «Вставка», «Разметка страницы» и других.

Вкладка «Файл» выделена особым цветом и обозначена значком, изображающим папку. Кликните на эту вкладку один раз мышью, чтобы открыть ее. После этого откроется выпадающее меню со списком различных функций и инструментов.

В этом выпадающем меню вы увидите множество опций, таких как «Открыть», «Сохранить», «Печать» и другие. Именно здесь вы должны найти и выбрать функцию «Создание копии», «Сохранить как» или аналогичную, которая позволит изменить версию файла Word на новую.

Обратите внимание, что расположение опции «Создание копии» может отличаться в зависимости от версии программы Microsoft Word. Некоторые версии могут иметь другие названия для этой функции, например, «Сохранить как новый файл». В любом случае, вам нужно выбрать такую опцию, которая позволит вам сохранить текущий документ как новую версию.

После выбора нужной функции откроется окно «Сохранение файла». Здесь вы сможете задать новое имя файла и выбрать путь сохранения. Выберите новое имя для файла и укажите путь, где хотите сохранить новую версию. Нажмите кнопку «Сохранить», чтобы завершить процесс изменения версии файла Word.

В меню выберите опцию «Сохранить как» и далее «Другие форматы»

Чтобы изменить версию файла Word, вам потребуется открыть документ в программе Microsoft Word. После этого следуйте следующим инструкциям:

1. Щелкните на вкладке «Файл» в верхнем левом углу программы.

2. В открывшемся меню выберите опцию «Сохранить как».

3. После этого вам будет предложено выбрать папку для сохранения файла и указать его название. Выберите нужное для вас место сохранения и введите имя нового файла.

4. В открывшемся диалоговом окне «Сохранить как» выберите вкладку «Другие форматы». Она находится обычно в правой части окна.

5. Теперь вы увидите список доступных форматов файла. Выберите необходимый формат, который соответствует желаемой версии Word. Например, если вы хотите сохранить файл в формате Word 97-2003, выберите вариант «Документ Word 97-2003 (*.doc)».

6. Нажмите кнопку «Сохранить», чтобы окончательно сохранить файл с выбранной версией. По умолчанию, программа сохранит файл в новом формате и сохранит его в указанной вами папке.

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

Лучший ответ Сообщение было отмечено как решение

Решение

wroud, я думаю ТС это надо сделать программно, иначе тема находилась бы в разделе софта…

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Runtime.InteropServices;
 
namespace ConsoleApplication30
{
    class Program
    {
        [DllImport( "kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        static extern IntPtr BeginUpdateResource (
            [In] string pFileName,
            [In] bool bDeleteExistingResources
            );
 
        [DllImport( "kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        [return: MarshalAs( UnmanagedType.Bool )]
        static extern bool UpdateResource (
            [In]            IntPtr hUpdate,
            [In]            IntPtr lpType,
            [In]            IntPtr lpName,
            [In]            ushort wLanguage,
            [In, Optional]  string lpData, // или byte[]
            [In]            int cbData
            );
 
        [DllImport( "kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        [return: MarshalAs( UnmanagedType.Bool )]
        static extern bool EndUpdateResource (
            [In] IntPtr hUpdate,
            [In] bool fDiscard
            );
 
        static readonly IntPtr VERSION_INFO_ID = (IntPtr)16;    // По умолчанию для ресурса с информацией
        static readonly IntPtr VERSION_NAME_ID = (IntPtr)1;     // По умолчанию первый в директории
        const           ushort VERSION_LANG_ID = 4105;          // Может быть другим, брал
                                                                // для конкретного EXE
 
        static void Main ( string[] args )
        {
            IntPtr hRes   = BeginUpdateResource( "f:\\peview.exe", false );
            bool   result = false;
 
            if ( hRes == IntPtr.Zero )
                return;
 
            result = UpdateResource( hRes, VERSION_INFO_ID, VERSION_NAME_ID, VERSION_LANG_ID, "Hello", 10 );
 
            if ( !result )
                Console.WriteLine( Marshal.GetLastWin32Error() );
 
            if ( !EndUpdateResource( hRes, false ) )
                Console.WriteLine( Marshal.GetLastWin32Error() );
 
            Console.ReadKey();
        }
    }
}

Замена указанного ресурса (с помощью VERSION_INFO_ID, VERSION_NAME_ID, VERSION_LANG_ID) на заданный. Вам остается только динамически определять язык нужного Вам ресурса (была тема на форума по перечислению ресурсов в корневом разделе .NET) если это необходимо, и верно построить структуру VERSION_INFO, так чтобы её смог прочитать Explorer и отобразить данные.

Ссылки для изучения: Using Resources, Version Information, EnumResourceLanguages.

p.s. Если в BeginUpdateResource второй параметр установить в true, то не все EXE обрабатываются корректно, после редактирования они становятся неисправными. Второй параметр отвечает за удаление исходных ресурсов, поэтому в Вашем случае должно быть всё нормально, т.к. Вам не надо удалять ресурс.



3



Как изменить информацию о версии файла и версии продукта в .exe-файле?

К примеру изменить дату создания можно через IO.File.SetCreationTime, а как быть с остальной информацией?

P.S. Нужно изменить у скомпилированного файла, а не до его сборки.

Arhadthedev's user avatar

Arhadthedev

11.5k8 золотых знаков42 серебряных знака69 бронзовых знаков

задан 4 апр 2017 в 21:02

Limbend's user avatar

6

  1. Воспользуйтесь низкоуровневыми вызовами Win32 API — подробнее по ссылке
  2. Можно также использовать высокоуровневую обёртку над этими вызовами, которая распространяется в виде подключаемого NuGet-пакета:

    Install-Package Vestris.ResourceLib

Пример использования этой библиотеки:

  • Получение информации о ресурсах dll или exe

    string filename = "ConsoleApp1.exe"; // path to dll or exe
    VersionResource vr = new VersionResource();
    vr.LoadFrom(filename);
    
    StringFileInfo sfi = (StringFileInfo)vr["StringFileInfo"];
    foreach (var stringTableEntry in sfi.Default.Strings)
    {
        Console.WriteLine($"{stringTableEntry.Value.Key} = {stringTableEntry.Value.StringValue}");
    }
    

    //output:

    Comments = 
    CompanyName = 
    FileDescription = ConsoleApp1
    FileVersion = 1.0.0.0
    InternalName = ConsoleApp1.exe
    LegalCopyright = Copyright ©  2017
    LegalTrademarks = 
    OriginalFilename = ConsoleApp1.exe
    ProductName = ConsoleApp1
    ProductVersion = 1.0.0.0
    Assembly Version = 1.0.0.0
    
  • Запись изменений обратно в файл сборки

    sfi["CompanyName"] = "New company name";
    sfi["ProductVersion"] = "1.1.1.2";
    sfi["LegalCopyright"] = "New copyright";
    
    vr.SaveTo(filename);
    

Остальная документация тут

ответ дан 4 апр 2017 в 22:55

Nikita's user avatar

NikitaNikita

1,9801 золотой знак15 серебряных знаков26 бронзовых знаков

1

  • Как изменить версию windows 11 с home на pro
  • Как изменить версию windows 10 в реестре
  • Как изменить версию windows 10 с корпоративная на pro
  • Как изменить версию windows 10 без переустановки
  • Как изменить версию python по умолчанию в windows