UncleFather » 21 июн 2016 11:54, Вт
Задача:
Имеется установленная Microsoft Visual Studio 6.0. На Visual Basic создан проект, откомпилирован в exe-файл.
Необходимо сделать так, чтобы на тех компьютерах, где этот exe-шник будет запускаться, он бы запускался в контексте Администратора (от имени Администратора).
Конечно, можно создать ярлык, в свойствах которого указать, что запускаться нужно от имени Администратора, или сделать то же самое в свойствах самого exe-файла. Но эти способы годятся только в том случае, когда есть доступ к конечному компьютеру (компьютеру пользователя), либо уровень навыков пользователя позволит ему самому это сделать. К сожалению, это не всегда так.
Поэтому задача состоит в том, чтобы в сам exe-файл «прошить» информацию о том, что он должен запускаться от имени Администратора.
Решение 1:
Можно просто в имя запускаемой программы включить слово «Installer». Windows 7, 8, 8.1 (скорее всего, это относится и к Vista и к более поздним версиям) сама поймет, что это приложение нужно запускать с Администраторскими привилегиями и отметит такой файл значком:
- 01.jpg (9.58 КБ) 22499 просмотров
При этом, естественно, манифест Администратора, в файл записываться не будет.
Решение 2:
Можно создать файл манифеста с таким же именем, как исполняемый exe файл и с расширением manifest, положить его в ту же папку, где лежит скомпилированный exe-файл:
Синтаксис и создание файла манифеста не входят в рамки этой статьи, но в нем обязательно должен быть установлен параметр «requestedExecutionLevel». К тому же содержимое манифеста можно скопировать из любого другого подходящего файла, который уже содержит в себе манифест Администратора. Для этого понадобится утилита типа «ResourceHacker»:
Решение 3:
Можно загрузить манифест в файл ресурса с номером 24.
Для этого нужно открыть оболочку Microsoft Visual C++ 6.0, создать новый файл ресурса, в котором создать новый ресурс с номером 24, в который скопировать содержимое манифеста:
и сохранить готовый файл ресурса.
Затем, уже в оболочке Microsoft Basic 6.0 нужно подгрузить этот созданный файл ресурса в проект:
После этого, в заново скомпилированном exe файле будет содержаться манифест Администратора.
Примечание:
Exe-файлы, скомпилированные в VB6 и запускаемые от имени Администратора, нормально работающие на 32-х разрядных ОС, не всегда работают так, как было задумано разработчиком на 64-х разрядных системах.
Например, это касается исполнения внешних программ, вызываемых из Visual Basic методом ShellExecute или WshShell.Run объекта «WScript.Shell». Окна (интерфейсы) запускаемых внешних программ не всегда видны пользователю, какие бы значения параметров, отвечающих за фокус, размер и положение окон, мы ни применяли. От разрядности запускаемой внешней программы это тоже не зависит, как не зависит и от того, скомпилирована ли запускаемая внешняя программа для запуска в контексте Администратора (то есть вложен ли в нее манифест Администратора). Не зависит это и от состояния UAC (контроль учетных записей пользователя) на конечном компьютере.
У меня на 64-х разрядных ОС были видны окна запускаемых из моего VB6 приложения установщиков программ, например, установщика AccessRuntime, и не были видны открываемые pdf-файлы и распаковываемые sfx rar архивы.
Решение 4, позволяющее избежать ошибок, указанных в примечании:
Если в программе не используются окна форм (то есть используются только модули), то можно создать VBS (Visual Basic Script), вместо программы на VB (Visual Basic) и откомпилировать его хоть для 32-х, хоть для 64-х -разрядной системы, включив в него манифест Администратора. См. статью VBS. Как перекомпилировать (конвертировать) VBS в exe.
[b][size=150]Задача:[/size][/b]
Имеется установленная Microsoft Visual Studio 6.0. На Visual Basic создан проект, откомпилирован в exe-файл.
Необходимо сделать так, чтобы на тех компьютерах, где этот exe-шник будет запускаться, он бы запускался в контексте Администратора (от имени Администратора).
Конечно, можно создать ярлык, в свойствах которого указать, что запускаться нужно от имени Администратора, или сделать то же самое в свойствах самого exe-файла. Но эти способы годятся только в том случае, когда есть доступ к конечному компьютеру (компьютеру пользователя), либо уровень навыков пользователя позволит ему самому это сделать. К сожалению, это не всегда так.
Поэтому задача состоит в том, чтобы в сам exe-файл «прошить» информацию о том, что он должен запускаться от имени Администратора.
[hr][/hr]
[b][size=150]Решение 1:[/size][/b]
Можно просто в имя запускаемой программы включить слово «[b][i]Installer[/i][/b]». Windows 7, 8, 8.1 (скорее всего, это относится и к Vista и к более поздним версиям) сама поймет, что это приложение нужно запускать с Администраторскими привилегиями и отметит такой файл значком:[attachment=5]01.jpg[/attachment]
При этом, естественно, манифест Администратора, в файл записываться не будет.
[hr][/hr]
[b][size=150]Решение 2:[/size][/b]
Можно создать файл манифеста с таким же именем, как исполняемый exe файл и с расширением [b][i]manifest[/i][/b], положить его в ту же папку, где лежит скомпилированный exe-файл:[attachment=4]04.jpg[/attachment]
Синтаксис и создание файла манифеста не входят в рамки этой статьи, но в нем обязательно должен быть установлен параметр «[b][i]requestedExecutionLevel[/i][/b]». К тому же содержимое манифеста можно скопировать из любого другого подходящего файла, который уже содержит в себе манифест Администратора. Для этого понадобится утилита типа «[url=http://www.angusj.com/resourcehacker/]ResourceHacker[/url]»:[attachment=3]03.jpg[/attachment]
[hr][/hr]
[b][size=150]Решение 3:[/size][/b]
Можно загрузить манифест в файл ресурса с номером [b][size=130]24[/size][/b].
Для этого нужно открыть оболочку [i]Microsoft Visual C++ 6.0[/i], создать новый файл ресурса, в котором создать новый ресурс с номером [b]24[/b], в который скопировать содержимое манифеста:[attachment=2]05.jpg[/attachment] и сохранить готовый файл ресурса.
Затем, уже в оболочке [i]Microsoft Basic 6.0[/i] нужно подгрузить этот созданный файл ресурса в проект:[attachment=1]06.jpg[/attachment][attachment=0]07.jpg[/attachment]
После этого, в заново скомпилированном exe файле будет содержаться манифест Администратора.
[hr][/hr]
[b][size=150]Примечание:[/size][/b]
Exe-файлы, скомпилированные в VB6 и запускаемые от имени Администратора, нормально работающие на 32-х разрядных ОС, не всегда работают так, как было задумано разработчиком на 64-х разрядных системах.
Например, это касается исполнения внешних программ, вызываемых из Visual Basic методом [b][i]ShellExecute[/i][/b] или [b][i]WshShell.Run[/i][/b] объекта «[b][i]WScript.Shell[/i][/b]». Окна (интерфейсы) запускаемых внешних программ не всегда видны пользователю, какие бы значения параметров, отвечающих за фокус, размер и положение окон, мы ни применяли. От разрядности запускаемой внешней программы это тоже не зависит, как не зависит и от того, скомпилирована ли запускаемая внешняя программа для запуска в контексте Администратора (то есть вложен ли в нее манифест Администратора). Не зависит это и от состояния UAC (контроль учетных записей пользователя) на конечном компьютере.
У меня на 64-х разрядных ОС были видны окна запускаемых из моего VB6 приложения установщиков программ, например, установщика [b][i]AccessRuntime[/i][/b], и не были видны открываемые [b][i]pdf[/i][/b]-файлы и распаковываемые [b][i]sfx rar[/i][/b] архивы.
[hr][/hr]
[b][size=150]Решение 4, позволяющее избежать ошибок, указанных в примечании:[/size][/b]
Если в программе не используются окна форм (то есть используются только модули), то можно создать VBS (Visual Basic Script), вместо программы на VB (Visual Basic) и откомпилировать его хоть для 32-х, хоть для 64-х -разрядной системы, включив в него манифест Администратора. См. статью [url=http://manaeff.ru/forum/viewtopic.php?p=1901#p1901]VBS. Как перекомпилировать (конвертировать) VBS в exe[/url].