Vbscript 启动计划任务时,HTA vbs脚本无法执行程序

Vbscript 启动计划任务时,HTA vbs脚本无法执行程序,vbscript,hta,Vbscript,Hta,尝试制作一个简单的HTA信息亭,当用户登录时自动启动。 但是,当我将hta添加为计划任务时,我无法让它工作 我使用hta文件作为初始屏幕,同时它执行所需的脚本和程序,然后是kiosk接口hta文件 当我手动运行splash hta时,一切都按预期运行。但是,当我将splash HTA作为计划任务添加时,它会破坏我的执行脚本,并且找不到我告诉它要启动的任何程序和脚本 我使用Inno安装程序来安装kiosk,如果可能的话,我还希望它能够安装在预定任务中 我需要运行的文件安装到:C:\Users\US

尝试制作一个简单的HTA信息亭,当用户登录时自动启动。 但是,当我将hta添加为计划任务时,我无法让它工作

我使用hta文件作为初始屏幕,同时它执行所需的脚本和程序,然后是kiosk接口hta文件

当我手动运行splash hta时,一切都按预期运行。但是,当我将splash HTA作为计划任务添加时,它会破坏我的执行脚本,并且找不到我告诉它要启动的任何程序和脚本

我使用Inno安装程序来安装kiosk,如果可能的话,我还希望它能够安装在预定任务中

我需要运行的文件安装到:
C:\Users\USER\AppData\Local\Programs\MyKiosk\data

计划的任务操作是: 程序:
C:\Windows\System32\mshta.exe
参数:
%localappdata%\Programs\Mykiosk\Splash.hta

这是splash HTA中的vbs脚本:

<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 ""&Program&"",,"data\", "runas", 0
        set shell=nothing
    End sub
    '-----------------------------Sleep-----------------------------------------
    Sub Sleep(seconds)
        CreateObject("WScript.Shell").Run "%COMSPEC% /c ping 127.0.0.1 -n " _
        & seconds+1, 0, True
    End Sub

    </script>
另外,如何使用特定用户(运行安装程序的用户)创建ONLOGON


我尝试添加/U{username},但这破坏了脚本。

尝试使用vbscript创建任务:
HTA\U Tasker\U 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%\Programs\Mykiosk\data\Splash.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 "&_
Repeat_Task &" /DU 24:00 /TN "& TaskName &" /TR "& WScript.ScriptFullName &""
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%\Programs\Mykiosk\data\Splash.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 "&_
Repeat_Task &" /DU 24:00 /TN "& DblQuote(TaskName) &" /TR "& WScript.ScriptFullName &""
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 "&_
"/TN "& DblQuote(TaskName) &" /TR "& WScript.ScriptFullName &""
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) & " /elevate", "", "runas", 1
    WScript.Quit
End If
End Sub
'-------------------------------------------------------------------------------------
Function DblQuote(Str)
    DblQuote = Chr(34) & Str & Chr(34)
End Function
'-------------------------------------------------------------------------------------
Sub Delete(TaskName)
Dim Ws,Task,Result
Set Ws = CreateObject("Wscript.Shell")
Task = "CMD /C schtasks /Delete /TN "& DblQuote(TaskName) &" /F"
Result = Ws.run(Task,0,True)
End Sub
'-------------------------------------------------------------------------------------

谢谢,但我更喜欢在Inno安装程序中使用本机run命令添加任务,以便更容易卸载等。。但如果我不能让它工作,我可能会走那条路。。但是我刚刚发现为什么我的脚本会中断,所以我希望有人能找到更新问题的解决方案..你还没有尝试过吗??因为我在发邮件给你之前已经测试过了!而且它有效!没有,我没有试过,但我会用它作为备份。。你看到我对这个问题的更新了吗?@Xenosis你可以看看我上次的编辑代码!我已经测试了你的代码,发现了一些问题。。当我用你的脚本运行安装程序时,它会在安装中间启动信息亭,并在安装完成之前开始锁定窗口。不是我打算这样做的。但是最大的问题是,在重新启动Windows之后,程序仍然没有发现错误,并且计划的任务打开了脚本。所以我想这仍然是目录中缺少工作/启动的问题。
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%\Programs\Mykiosk\data\Splash.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 "&_
Repeat_Task &" /DU 24:00 /TN "& DblQuote(TaskName) &" /TR "& WScript.ScriptFullName &""
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 "&_
"/TN "& DblQuote(TaskName) &" /TR "& WScript.ScriptFullName &""
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) & " /elevate", "", "runas", 1
    WScript.Quit
End If
End Sub
'-------------------------------------------------------------------------------------
Function DblQuote(Str)
    DblQuote = Chr(34) & Str & Chr(34)
End Function
'-------------------------------------------------------------------------------------
Sub Delete(TaskName)
Dim Ws,Task,Result
Set Ws = CreateObject("Wscript.Shell")
Task = "CMD /C schtasks /Delete /TN "& DblQuote(TaskName) &" /F"
Result = Ws.run(Task,0,True)
End Sub
'-------------------------------------------------------------------------------------