#vbscript #hta
#vbscript #hta
Вопрос:
Пытаюсь создать простой киоск HTA, который автоматически запускается при входе пользователя в систему. Но я не могу заставить его работать, когда добавляю hta в качестве запланированной задачи.
Я использую hta-файл в качестве заставки, пока он выполняет необходимые скрипты и программы, а затем HTA-файл интерфейса киоска.
Когда я запускаю заставку hta вручную, все работает так, как задумано. Но когда я добавляю заставку HTA в качестве запланированной задачи, это прерывает мой сценарий выполнения и не может найти ни одну из программ и скриптов, которые я указываю ему запускать.
Я использую Inno setup для установки киоска, а также хочу, чтобы он настроил запланированную задачу, если это возможно.
Файлы, которые мне нужно запустить, установлены в: C:UsersUSERAppDataLocalProgramsMyKioskdata
Запланированное действие задачи: Program: C:WindowsSystem32mshta.exe
Аргументы: %localappdata%ProgramsMykioskSplash.hta
Это скрипт vbs из заставки HTA:
<HTA:APPLICATION
CONTEXTMENU = "no"
BORDER="none"
INNERBORDER = "no"
SINGLEINSTANCE = "yes"
SHOWINTASKBAR = "no"
SCROLL="no"/>
<script type="text/vbscript">
Sub window_onload()
CenterWindow (screen.Width - widthX)/4, (screen.Height - heightY)/4.5
Call Execute("program.exe")
Call Execute("script.bat")
Call Sleep(1)
Call Execute("StartKiosk.bat")
Window.Close
End Sub
'-----------------------------WindowsSize-----------------------------------------
Sub CenterWindow( widthX, heightY )
self.ResizeTo widthX, heightY
self.MoveTo (screen.Width - widthX)/2, (screen.Height - heightY)/2
End Sub
'----------------------------Execute---------------------------------------
Sub Execute(Program)
set shell=CreateObject("Shell.Application")
' shell.ShellExecute "application", "arguments", "path", "verb", window
shell.ShellExecute ""amp;Programamp;"",,"data", "runas", 0
set shell=nothing
End sub
'-----------------------------Sleep-----------------------------------------
Sub Sleep(seconds)
CreateObject("WScript.Shell").Run "%COMSPEC% /c ping 127.0.0.1 -n " _
amp; seconds 1, 0, True
End Sub
</script>
Я попытался заменить data
путь к %localappdata%ProgramsMykioskdata
Но это не помогло, получите то же самое, Windows не может найти ошибки программы.
Я застрял, кто-нибудь может сказать мне, что я делаю не так?
Обновить:
Похоже, проблема с параметром «Начать в» отсутствует..
Итак, кто-нибудь может рассказать мне, как бы я настроил запланированную задачу с помощью команды SCHTASKS?
На странице инструкций не совсем понятно, как добавить рабочий каталог и выполнить ONLOGON с конкретным пользователем (пользователь, запускающий установщик)..
Вот моя попытка создать запланированную задачу с помощью Inno Setup:
Filename: "schtasks";
Parameters: "/Create /F /SC ONLOGON /TN ""My Kisok"" /TR ""'C:WindowsSystem32mshta.exe' {app}Splash.hta""";
Flags: runhidden
Также, как мне создать ONLOGON с конкретным пользователем (пользователь, запускающий установщик)
Я пробовал addig /U {username}, но это нарушает работу скрипта.
Ответ №1:
Попробуйте создать задачу с помощью vbscript : HTA_Tasker_Creator.vbs
Option Explicit
Dim Ws,TaskName,Repeat_Task,HTA_FILE_PATH
Set Ws = CreateObject("Wscript.Shell")
TaskName = "Open_HTA"
Repeat_Task = 30 ' in minutes
HTA_FILE_PATH = "%localappdata%ProgramsMykioskdataSplash.hta"
Ws.run HTA_FILE_PATH,1,True
Call Create_Schedule_Task(TaskName,Repeat_Task)
'----------------------------------------------------------------------
Sub Create_Schedule_Task(TaskName,Repeat_Task)
Dim Ws,Task,Result
Set Ws = CreateObject("Wscript.Shell")
Task = "CMD /C Schtasks /Create /SC DAILY /ST 08:00 /F /RI "amp;_
Repeat_Task amp;" /DU 24:00 /TN "amp; TaskName amp;" /TR "amp; WScript.ScriptFullName amp;""
Result = Ws.run(Task,0,True)
End Sub
'----------------------------------------------------------------------
Редактировать: 24/08/2020 в 00:52
Вот еще один vbscript, в который я добавил некоторые функции для создания задачи ONLOGON
, и его тоже можно удалить с правами администратора!
Option Explicit
Dim Ws,TaskName,Repeat_Task,HTA_FILE_PATH
Set Ws = CreateObject("Wscript.Shell")
Call Run_as_Admin() ' We execute our script with admin rights !
TaskName = "My Kisok"
Repeat_Task = 30 ' in minutes
HTA_FILE_PATH = "%localappdata%ProgramsMykioskdataSplash.hta"
Ws.run HTA_FILE_PATH,1,True
Call Create_Schedule_Task_ONLOGON(TaskName)
'Call Create_Schedule_Task(TaskName,Repeat_Task)
'Call Delete(TaskName) 'If You want to delete the Task just uncomment this line and comment the subroutine with Create_Shedule... in name
'-------------------------------------------------------------------------------------
Sub Create_Schedule_Task(TaskName,Repeat_Task)
Dim Ws,Task,Result
Set Ws = CreateObject("Wscript.Shell")
Task = "CMD /C Schtasks /Create /SC DAILY /ST 08:00 /F /RI "amp;_
Repeat_Task amp;" /DU 24:00 /TN "amp; DblQuote(TaskName) amp;" /TR "amp; WScript.ScriptFullName amp;""
Result = Ws.run(Task,0,True)
End Sub
'-------------------------------------------------------------------------------------
Sub Create_Schedule_Task_ONLOGON(TaskName)
Dim Ws,Task,Result
Set Ws = CreateObject("Wscript.Shell")
Task = "CMD /C Schtasks /Create /SC ONLOGON /F "amp;_
"/TN "amp; DblQuote(TaskName) amp;" /TR "amp; WScript.ScriptFullName amp;""
Result = Ws.run(Task,0,True)
End Sub
'-------------------------------------------------------------------------------------
Sub Run_as_Admin()
If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute DblQuote(WScript.FullName) _
, DblQuote(WScript.ScriptFullName) amp; " /elevate", "", "runas", 1
WScript.Quit
End If
End Sub
'-------------------------------------------------------------------------------------
Function DblQuote(Str)
DblQuote = Chr(34) amp; Str amp; Chr(34)
End Function
'-------------------------------------------------------------------------------------
Sub Delete(TaskName)
Dim Ws,Task,Result
Set Ws = CreateObject("Wscript.Shell")
Task = "CMD /C schtasks /Delete /TN "amp; DblQuote(TaskName) amp;" /F"
Result = Ws.run(Task,0,True)
End Sub
'-------------------------------------------------------------------------------------
Комментарии:
1. Спасибо, Но я бы предпочел добавить задачу с помощью встроенной команды run внутри Inno Setup, чтобы упростить удаление и т.д.. Но если я не могу заставить его работать, я могу пойти этим путем.. Но я только что узнал, почему мой скрипт ломается, поэтому я надеюсь, что у кого-то есть решение обновленного вопроса..
2. Вы еще не пробовали это?? Потому что я протестировал его перед отправкой вам! И это работает!
3. Нет, не пробовал, но я буду использовать его в качестве резервной копии.. Вы видели обновление, которое я внес в вопрос?
4. @Xenosis Вы можете взглянуть на мой последний отредактированный код!
5. Я протестировал ваш код и получил несколько проблем.. Когда я запускаю установщик с вашим скриптом, он запускает киоск в середине установки и начинает блокировать Windows до завершения установки .. Не так, как я предполагал, что это сработает. Но большая проблема в том, что я все еще получаю ошибки program not found после перезапуска Windows, и запланированная задача открывает скрипт.. Итак, я предполагаю, что это все еще рабочая проблема / Запуск в каталоге отсутствует.