Предпочтительно C++, он должен работать для всех программ без исключения. Мне следует автоматизировать и уменьшить размер программы, поэтому, пожалуйста, не отдавайте предпочтение Resource Hacker или dll. Однако, если вы не можете придумать другой метод, вы можете написать его, я бы скорее немного увеличил размер, чем не нашел бы никакого способа. Он должен изменить всю информацию, содержащуюся в FileVersionInfo.
Я попробовал Windows API, но он просто удалил информацию о версии, а не изменил ее. Я попробовал dll под названием "DSofile", она даже не удалила информацию о версии. Вот пример кода.
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern IntPtr BeginUpdateResource(string pFileName, [MarshalAs(UnmanagedType.Bool)] bool bDeleteExistingResources);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool UpdateResource(IntPtr hUpdate, IntPtr lpType, IntPtr lpName, ushort wLanguage, byte[] lpData, uint cbData);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EndUpdateResource(IntPtr hUpdate, [MarshalAs(UnmanagedType.Bool)] bool fDiscard);
private static IntPtr StringToIntPtr(string s)
{
return Marshal.StringToHGlobalUni(s);
}
public static bool UpdateVersionResource(string filePath, string resourceName, string newValue)
{
IntPtr handle = BeginUpdateResource(filePath, false);
if (handle == IntPtr.Zero)
{
Console.WriteLine($"Error opening file for update: {resourceName}");
return false;
}
// Create the structure for the version info resource
var versionInfo = new VS_VERSIONINFO
{
Length = (ushort)(Marshal.SizeOf(typeof(VS_VERSIONINFO)) + (newValue.Length + 1) * 2),
ValueLength = (ushort)(newValue.Length + 1),
Type = 1,
Key = "VS_VERSION_INFO",
Value = newValue
};
int size = Marshal.SizeOf(versionInfo);
IntPtr buffer = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(versionInfo, buffer, false);
byte[] data = new byte[size];
Marshal.Copy(buffer, data, 0, size);
Marshal.FreeHGlobal(buffer);
IntPtr type = new IntPtr(16); // RT_VERSION
IntPtr name = new IntPtr(1); // VS_VERSION_INFO
ushort language = 1033; // English (US)
bool result = UpdateResource(handle, type, name, language, data, (uint)data.Length);
if (!result)
{
Console.WriteLine($"Error updating resource: {resourceName}");
EndUpdateResource(handle, true);
return false;
}
if (!EndUpdateResource(handle, false))
{
Console.WriteLine($"Error finishing update: {resourceName}");
return false;
}
return true;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct VS_VERSIONINFO
{
public ushort Length;
public ushort ValueLength;
public ushort Type;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string Key;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Value;
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... tc-with-an
Как я могу изменить описание другого исполняемого файла, товарные знаки и т. д. с помощью программного обеспечения, напи ⇐ C#
Место общения программистов C#
1720442927
Anonymous
Предпочтительно C++, он должен работать для всех программ без исключения. Мне следует автоматизировать и уменьшить размер программы, поэтому, пожалуйста, не отдавайте предпочтение Resource Hacker или dll. Однако, если вы не можете придумать другой метод, вы можете написать его, я бы скорее немного увеличил размер, чем не нашел бы никакого способа. Он должен изменить всю информацию, содержащуюся в FileVersionInfo.
Я попробовал Windows API, но он просто удалил информацию о версии, а не изменил ее. Я попробовал dll под названием "DSofile", она даже не удалила информацию о версии. Вот пример кода.
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern IntPtr BeginUpdateResource(string pFileName, [MarshalAs(UnmanagedType.Bool)] bool bDeleteExistingResources);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool UpdateResource(IntPtr hUpdate, IntPtr lpType, IntPtr lpName, ushort wLanguage, byte[] lpData, uint cbData);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EndUpdateResource(IntPtr hUpdate, [MarshalAs(UnmanagedType.Bool)] bool fDiscard);
private static IntPtr StringToIntPtr(string s)
{
return Marshal.StringToHGlobalUni(s);
}
public static bool UpdateVersionResource(string filePath, string resourceName, string newValue)
{
IntPtr handle = BeginUpdateResource(filePath, false);
if (handle == IntPtr.Zero)
{
Console.WriteLine($"Error opening file for update: {resourceName}");
return false;
}
// Create the structure for the version info resource
var versionInfo = new VS_VERSIONINFO
{
Length = (ushort)(Marshal.SizeOf(typeof(VS_VERSIONINFO)) + (newValue.Length + 1) * 2),
ValueLength = (ushort)(newValue.Length + 1),
Type = 1,
Key = "VS_VERSION_INFO",
Value = newValue
};
int size = Marshal.SizeOf(versionInfo);
IntPtr buffer = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(versionInfo, buffer, false);
byte[] data = new byte[size];
Marshal.Copy(buffer, data, 0, size);
Marshal.FreeHGlobal(buffer);
IntPtr type = new IntPtr(16); // RT_VERSION
IntPtr name = new IntPtr(1); // VS_VERSION_INFO
ushort language = 1033; // English (US)
bool result = UpdateResource(handle, type, name, language, data, (uint)data.Length);
if (!result)
{
Console.WriteLine($"Error updating resource: {resourceName}");
EndUpdateResource(handle, true);
return false;
}
if (!EndUpdateResource(handle, false))
{
Console.WriteLine($"Error finishing update: {resourceName}");
return false;
}
return true;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct VS_VERSIONINFO
{
public ushort Length;
public ushort ValueLength;
public ushort Type;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string Key;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Value;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78720956/how-can-i-change-another-executable-files-description-trademarks-etc-with-an[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия