在用户登录之前,Azure VM 启动时批处理文件不是 运行

Batch file not running on Azure VM Startup until user login

问题: 有谁知道为什么在用户通过远程桌面连接之前机器启动时批处理文件不是 运行?另外,有没有办法在机器启动时执行批处理文件而不需要任何用户交互?

背景: 我有一个托管在 Microsoft Azure 中的虚拟机。我打开了一个远程桌面会话,创建了一个启动游戏服务器的简单批处理文件(即 gameserver.exe),创建了该批处理文件的快捷方式,并将快捷方式添加到 AppData/Windows/Start Menu/Programs/Startup。

现在,当我从 Azure 管理控制台重新启动 VM 时。无论我等待多长时间,我都没有看到游戏服务器启动。

但是,当我在连接远程桌面会话后立即远程进入 VM 时,我看到批处理文件打开并启动 运行,从而启动了我的游戏服务器。

我可以创建 gameserver.exe 的快捷方式并将其放入启动文件夹,并且在 VM 重新启动后立即运行。但是,我需要做一些不同的事情,以便在启动之前配置服务器,所以我想使用批处理文件来完成它。

据我所知,在服务器上做一些事情 运行 的唯一方法是使用计算机配置的组策略在启动时自动 运行 一些事情。下一步将是注册表中的一个自动运行键 (RunOnce),它在用户登录时执行某些操作。下一步将是 PsExec,它可以针对远程机器和 运行 您的可执行文件或脚本选择.

此外,您可以将 VM 配置为自动登录用户然后锁定 VM。这样,您的 RunOnce 来自注册表将 运行ning 甚至将应用程序快捷方式放入启动文件夹中。查看更多关于自动登录和锁定的信息 here.

您也可以尝试使用 Windows 任务计划程序。您只需要创建一个具有管理员权限的任务,该任务会在启动时触发 运行 program\exe\batch。

这是一个示例 XML,您可以 import 并进行相应的更改。

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2015-07-22T12:21:20.7566893</Date>
    <Author>SRIKANTH-PC\vishwanath</Author>
    <Description>sample task desc</Description>
  </RegistrationInfo>
  <Triggers>
    <BootTrigger>
      <Enabled>true</Enabled>
    </BootTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>SRIKANTH-PC\vishwanath</UserId>
      <LogonType>S4U</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>F:\Projects\zipalign.exe</Command>
      <WorkingDirectory>F:\Projects\</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

使用任务计划程序。您想要带圆圈的选项。