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

C# 在Windows服务器启动时自动运行程序,c#,vb.net,C#,Vb.net,我正在尝试在始终打开的windows服务器上安装应用程序,但遇到了问题。我听说我不应该让它成为Windows服务(我个人更希望有一个对话框应用程序,这样我就可以看到进度等),所以我尝试使用任务调度器。然而,任务调度程序一直试图过早地关闭我的应用程序,而它本应只打开并保持打开状态 有没有办法让dialog应用程序在启动时在我的服务器上运行(并保持运行)?你应该创建一个Windows服务;这是唯一可靠的方法。 否则,例如,如果用户注销,您将遇到问题 如果您想要UI,可以创建一个单独的GUI与服务通信

我正在尝试在始终打开的windows服务器上安装应用程序,但遇到了问题。我听说我不应该让它成为Windows服务(我个人更希望有一个对话框应用程序,这样我就可以看到进度等),所以我尝试使用任务调度器。然而,任务调度程序一直试图过早地关闭我的应用程序,而它本应只打开并保持打开状态


有没有办法让dialog应用程序在启动时在我的服务器上运行(并保持运行)?

你应该创建一个Windows服务;这是唯一可靠的方法。
否则,例如,如果用户注销,您将遇到问题


如果您想要UI,可以创建一个单独的GUI与服务通信(可能使用WCF)。

我更喜欢在任务计划程序中创建一个任务,并将触发器设置为“启动时”,但您也可以使用启动脚本

您还可以使用本地组策略编辑器(执行gpedit)并添加启动脚本。从中复制步骤,以便如果将其取下,仍可以在so处找到

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

  • 这是一个非常古老的问题,但对于那些通过谷歌来到这里的人来说:

    启动命令提示符并键入
    shell:Startup

    这将在Startmenu/Programs/Startup->的隐藏AppData路径中打开一个窗口,为要启动的程序添加可执行文件的快捷方式

    这当然只适用于您当时使用的登录帐户


    对于所有用户,键入
    shell:Common Startup

    您可以使用计划任务来执行此操作,而用户登录/注销时不会出现问题

  • 打开任务计划程序,Windows Key+R
  • Taskschd.msc

  • 单击操作菜单>创建任务
  • 将用户更改为管理员或最好是服务帐户:
  • 登录时设置
  • 设置要启动的程序:

  • 我怎么还能让服务提供反馈,并能够动态地打开/关闭它?他能提供一个Windows服务,确保他的对话应用程序始终运行吗?编写一个GUI,与服务进行通信(使用WCF)并控制服务(使用
    ServiceController
    )。也许可以,但我建议不要这样做。首先,维护起来会更困难。@Rob:这些是为登录用户准备的。好的,我创建了一个程序,打开我的主程序,让任务调度器打开第一个程序,使它工作起来。不知何故,我不认为这是最好的方法,还有其他建议(除了提供服务)吗?这只适用于用户登录。所以,如果服务器因某种原因重新启动,在您登录之前,此任务将永远不会运行。@Max请参阅步骤3。无论用户是否登录都要运行此操作仅适用于:Windows 7、Windows 8、Windows Server 2008 R2、Windows Server 2012是的,这是2013。。。我得说它很老很好:)