在Windows服务器启动时自动运行程序

23

我正在尝试在始终开启的Windows服务器上创建和安装一个.NET应用程序,但我遇到了问题。我听说不应将其设置为Windows服务(个人更愿意使用对话框应用程序以便查看进度等信息),因此我试图使用任务计划程序。然而,任务计划程序一直试图过早地关闭我的应用程序,而应该只是打开并保持其打开状态。

有什么办法可以让我的对话框应用程序在服务器启动时运行(并保持运行状态)吗?


好的,我已经通过创建一个打开我的主程序的程序,并让任务计划程序打开第一个程序来使其工作。但我不认为这是最好的方法,除了创建服务之外,还有其他建议吗? - Rob
4个回答

31
你可以通过设置一个定时任务,在启动时或按计划运行,这样就不会出现用户登录/注销的问题。
1. 打开任务计划程序,按下Windows键 + R键

Taskschd.msc

点击操作菜单 > 创建任务

enter image description here

将用户更改为管理员或者更好地说是服务账户,并注意选择“无论用户是否登录都运行”的选项。

enter image description here

4a. 在启动时设置 - 与用户登录或退出无关。

enter image description here

4b. 或者设置为登录时 - 取决于用户的登录情况。

enter image description here

4c. 或者设置按计划工作,无论用户是否登录:

enter image description here

设置一个程序自动启动:

enter image description here

请注意:请使用服务账户进行操作,如果使用管理员账户,则在更改密码后会失败。
请注意:对于无人值守的应用程序,请选择控制台应用程序,因为某些用户界面应用程序可能会出现问题,除非有用户登录,这取决于具体情况。一般来说,不要保持窗口处于活动状态,即不要生成消息框 - 在使用后关闭所有窗口,或者只保留一个后台运行的控制台应用程序。您最不希望的是因为未处理的过多句柄和GDI对象而导致计算机崩溃。
start /B your_console_app.exe

/B标志告诉start在后台运行应用程序,而不创建新窗口。

enter image description here


这仅适用于用户登录。因此,如果服务器由于某种原因重新启动,则此任务将不会运行,直到您登录。 - Max
3
@Max请看第三步。无论用户是否已登录都要运行。 - Jeremy Thompson
这太完美了 - 主要是它在计算机启动时运行,而不是用户登录时。 - Criggie

11

你应该创建一个Windows服务;这是唯一可靠的方法。


否则,如果用户注销,你将会遇到问题。


如果你需要UI界面,你可以创建一个单独的GUI来与服务通信(可能使用WCF)。


他能否创建一个Windows服务,以确保他的对话框应用程序始终在运行? - Grokodile
1
编写一个GUI,通过WCF与服务进行通信,并使用ServiceController控制该服务。 - SLaks
1
也许可以这样做,但我不建议。首先,这样做会更难维护。 - SLaks
它会更难维护吗?我们将不断编辑程序,因此服务似乎有点过度。 - Rob
1
@Rob:那些是给已登录用户使用的。 - SLaks
显示剩余4条评论

11
如果你正在寻找“登录后自动运行”的解决方案,这里是答案:
在“运行”提示框中输入shell:Startup

enter image description here

这将在否则隐藏的AppData路径中打开一个窗口,用于Startmenu/Programs/Startup->为您想要启动的程序添加一个可执行文件的快捷方式。
当然,这只适用于您当前使用的登录帐户。
对于所有用户类型shell:Common Startup

文件名、目录名或卷标语法不正确。这个问题只存在于非服务器版的Windows系统中吗?(我正在使用Server 2016)。 - Steve Smith
“文件名、目录名或卷标语法不正确。”这个问题只出现在非服务器版的Windows系统中吗?(我正在使用Server 2016)。 - Steve Smith
1
这仅适用于用户登录,而不适用于系统启动,命名不好。 - undefined
@SteveSmith 不确定为什么在命令提示符中Shell命令现在停止工作了。谢谢你指出来。我已经相应地更新了答案。 - undefined
@ArtemKozlenkov 感谢你的指正。已相应更新了答案。 - undefined

5

我倾向于在任务计划程序中创建任务,并将触发器设置为“启动时”,但您也可以使用启动脚本。

您还可以使用本地组策略编辑器(执行gpedit)并添加启动脚本。从http://technet.microsoft.com/en-us/library/cc770556.aspx复制步骤,以便如果他们将其删除,它仍然可以在SO上找到。

分配计算机启动脚本

  1. 打开本地组策略编辑器。
  2. 在控制台树中,单击脚本(启动/关闭)。路径为计算机配置\Windows设置\脚本(启动/关闭)
  3. 在结果窗格中,双击启动
  4. 启动属性对话框中,单击添加
  5. 添加脚本对话框中,执行以下操作:
    • 脚本名称框中,键入脚本的路径,或单击浏览以在域控制器上的Netlogon共享文件夹中搜索脚本文件。
    • 脚本参数框中,键入您想要的任何参数,就像在命令行上输入它们一样。例如,如果您的脚本包括名为//logo(显示横幅)和//I(交互模式)的参数,请键入//logo //I
  6. 启动属性对话框中,指定您想要的选项:
    • <组策略对象>的启动脚本:列出当前分配给所选组策略对象(GPO)的所有脚本。如果您分配多个脚本,则按指定顺序处理这些脚本。要将脚本上移至列表中,请单击该脚本,然后单击上移。要将脚本下移至列表中,请单击该脚本,然后单击下移
    • 添加:打开添加脚本对话框,在其中可以指定任何其他要使用的脚本。
    • 编辑:打开编辑脚本对话框,在其中可以修改脚本信息,例如名称和参数。
    • 删除:从启动脚本列表中删除所选脚本。
    • 显示文件:显示存储在所选GPO中的脚本文件。

仅适用于:Windows 7,Windows 8,Windows Server 2008 R2,Windows Server 2012。 - Max
是的,这是2013年的事了...我想说它已经相当不错了 :) - g3rv4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接