1 (изменено: Alexey, 2011-05-16 23:02:57)

Тема: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Собратия по скриптингу, взываю к вам о мыслях Ваших благостных.
Потребность есть у меня ярлык создать скриптовым языком VBS, чтоб программу он от имени администратора запускал (UAC).
Решение одно мне пришло но не эстетичным видится мне оно. Прошу совета Вашего.
Вот мой вариант

Set WshShell = WScript.CreateObject("Wscript.Shell")
strDesktopFolder = WshShell.SpecialFolders("Desktop")
Set objShortCut = WshShell.CreateShortcut(strDesktopFolder & "\Notepad as admin.lnk")
objShortCut.TargetPath = "cmd.exe"
objShortCut.Description = "Notepad as admin"
objShortCut.Arguments = "/c echo @echo off && echo Set S = CreateObject(""Shell.Application"")>%temp%\r.vbs && echo S.ShellExecute ""notepad.exe"", , , ""runas"", 1 >>%temp%\r.vbs && wscript.exe %temp%\r.vbs"
objShortCut.WorkingDirectory= WshShell.SpecialFolders("System")
objShortCut.WindowStyle=7
objShortCut.IconLocation =WshShell.SpecialFolders("System")+"notepad.exe,0"
objShortCut.Save

2

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Для поддержки UAC я использовал возможности другого скриптового языка - AutiIt. Иформация о нем есть и на "Сером форуме".
AutiIt имеет для UAC специальную включаемую в код опцию, я некоторые свои VBS-наработки, вызывающие/активизирующие другие приложения, довольно быстро перенес на аутоит и усовершенствовал - работают они теперь и под XP и под Win7. Рекомендую.

В Вашем случае можно, например, сделать на AutiIt простейшеет приложение, запускающее полученную параметром программу уже с запросом подтверждения UAC в указанной директории с указаными параметрами окна, заодно можно и проконтролировать старт приложения и много прочего недоступного на vbscript. А ярлык сделать на строку вызова этой программы с передачей параметров.

WBR. Roman

3

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

2 Rom5: Может всё такие AutoIt, а не AutiIt ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

4

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Xameleon пишет:

2 Rom5: Может всё такие AutoIt, а не AutiIt ?

Каюсь, опечатался и размножил..
Alexey, полезный форум AutoIt-овых коллег: http://autoit-script.ru/

WBR. Roman

5

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Rom5 пишет:

Для поддержки UAC я использовал возможности другого скриптового языка - AutiIt. Иформация о нем есть и на "Сером форуме".
AutiIt имеет для UAC специальную включаемую в код опцию, я некоторые свои VBS-наработки, вызывающие/активизирующие другие приложения, довольно быстро перенес на аутоит и усовершенствовал - работают они теперь и под XP и под Win7. Рекомендую.

В Вашем случае можно, например, сделать на AutiIt простейшеет приложение, запускающее полученную параметром программу уже с запросом подтверждения UAC в указанной директории с указаными параметрами окна, заодно можно и проконтролировать старт приложения и много прочего недоступного на vbscript. А ярлык сделать на строку вызова этой программы с передачей параметров.

Спасибо за отзыв Rom5. С AutoIt я знаком и проблемы написать необходимый функционал нет, но в рамках моей текущей задачи создать ярлык необходимо именно из VBScript/Jscript.

6

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Alexey пишет:

Вот мой вариант

Если в ярлык в любом случае прописывается не программа, то почему бы не создать скрипт (например в C:\RunProgAs.vbs) вроде такого:


option explicit
Dim Shell
Set Shell = CreateObject("Shell.Application")
If WScript.Arguments.Count = 0 then wscript.echo "не указана программа для запуска!" : WScript.Quit
If WScript.Arguments.Count = 1 Then
    Shell.ShellExecute WScript.Arguments(0), , , "runas", 1
Else
    wscript.echo "слишком много параметров!" : WScript.Quit
End If

Тогда в свойствах ярлыка указать:


objShortCut.TargetPath = "wscript.exe"
objShortCut.Arguments = "C:\RunProgAs.vbs notepad.exe"

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

http://download.microsoft.com/download/a/e/6/ae6e4142-aa58-45c6-8dcf-a657e5900cd3/[MS-SHLLINK].pdf
Shell Link (.LNK) Binary File Format

MS-SHLLINK.pdf пишет:

2.1.1 LinkFlags
<...>
N (RunAsUser): The application is run as a different user when the target of the shell link is activated.

Но для меня это задачка требующая длительного отвлечения от забот насущных, а "Времени не хватает... :-(" (с) Евген

7 (изменено: Alexey, 2011-06-08 19:42:23)

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

BeS Yara пишет:

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

Спасибо за наводку, все получилось как надо.

Function make_this_shortcut_to_run_as_admin(file_name)
	Set instream = CreateObject("ADODB.Stream")
	Set fso = WScript.CreateObject("Scripting.Filesystemobject")	
	With instream
		.Charset = "ascii"
		.Type = 2
		.Mode = 3
		.Open()
		.Position = 0
		.LoadFromFile(file_name)
	fso.DeleteFile(file_name)
		.Position = 21
		.WriteText Chr(96)
		.Position = 0
		.SaveToFile file_name
		.Close()
	End With
	Set instream = Nothing
	Set Fso = Nothing
End Function

8

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Срочно в Коллекцию :-)

9

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Решил дополнить тему. Вдруг кто будет искать про UAC более подробно

1) Пример автоматического перезапуска скрипта с повышенными правами
http://www.winhelponline.com/articles/1 … ation.html

2) Примеры определения своих прав в скрипте
http://csi-windows.com/toolkit/ifuserperms
http://blogs.technet.com/b/jhoward/arch … cript.aspx

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

10

Re: VBS: Ярлык для запуска приложения от имени администратора (UAC)

Ну тогда и я добавлю ссылку на связанную тему на нашем форуме, содержащую простое и нестандартное решение (а ля sudo) для запуска любых прог с ком-строки с повышенными правами.