HTA vbs скрипт не может выполнить программу при запуске запланированной задачи

#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, и запланированная задача открывает скрипт.. Итак, я предполагаю, что это все еще рабочая проблема / Запуск в каталоге отсутствует.