Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 无法在计算机';上启动服务';_Powershell - Fatal编程技术网

Powershell 无法在计算机';上启动服务';

Powershell 无法在计算机';上启动服务';,powershell,Powershell,我正在尝试使用PowerShell创建并启动windows服务 创建了服务,但在使用除一个特定名称之外的各种名称时无法启动 当我用exe文件的名称创建服务时,它可以启动,但当我给它一个不同的名称时,它无法启动 我正在以管理员身份运行PowerShell脚本 有什么建议吗 function InstallService( [string] $MsDeployHost, [string] $ServiceName, [string] $DisplayName, [st

我正在尝试使用PowerShell创建并启动windows服务

创建了服务,但在使用除一个特定名称之外的各种名称时无法启动

当我用exe文件的名称创建服务时,它可以启动,但当我给它一个不同的名称时,它无法启动

我正在以管理员身份运行PowerShell脚本

有什么建议吗

function InstallService(
    [string] $MsDeployHost,
    [string] $ServiceName,
    [string] $DisplayName,
    [string] $ServicePath,
    [string] $ServiceDescription,
    [object] $Credential) {
    if($MsDeployHost -eq "local") {        
        New-Service -name $ServiceName -binaryPathName $ServicePath -displayName $ServiceName -StartupType Automatic
        Start-Service -name $ServiceName
    } else { ....  
我得到的错误是: 启动服务:服务“服务1” 由于以下错误,无法启动(Service1)“”: 无法在计算机“”上启动服务Service1

当我尝试手动启动时,我得到:
“错误1053:服务没有及时响应启动或控制请求”

问题是,除非您的服务是为了处理它而编写的,否则您需要使用特定的服务名称才能运行特定的服务(请注意,名称区分大小写)。这是因为服务在启动时需要向服务控制管理器注册,以便使用其服务名称接收启动/停止通知并发送状态更新。如果使用不同的名称安装服务,但可执行文件无法知道这一点(通过配置设置或诸如此类),则此注册将失败,并且服务无法启动(对于操作系统而言,服务似乎无法响应)


您可以将显示名称设置为任何您喜欢的名称,但不能使用任意服务名称,除非该服务设计为支持该名称。

我的问题是该服务在服务控制管理器中被禁用

然后我将其置于
手动
状态并启动服务


对我来说,
appsettings.json
中的值不正确。未转义某些特殊字符。

如果这也是一个.NET控制台应用程序,则必须在Program.cs的main方法中调用ServiceBase.Run。这为我修正了这个错误

请参见此处的更多特定代码:

请与我们共享您的代码。定义“启动失败”。你有错误吗?什么错误?事件日志中是否有相关内容?
$ServicePath
是否包含可执行文件的完整路径,包括可执行文件名?我收到以下错误:您是否尝试从服务控制管理器启动它?我尝试使用TopShelf将API安装为windows服务。我将Topshelf配置为使用服务名称“service1”,但在使用powershell命令“New service”进行安装时,我使用的是名称“service2”。这个评论让我意识到为什么它不起作用@jeroen mostert问题代码中到底需要修改什么?“特定服务名称”是什么意思?@Thomas:最终,当代码调用时,它必须在
service\u TABLE\u条目
结构中提供服务控制管理器期望的服务名称(即服务注册时使用的名称)。现在,这对代码的实际意义很大程度上取决于这个函数的最终调用方式;人们很少直接使用这些Win32函数。在PowerShell的特殊情况下,这意味着当您调用
新服务时,必须使用服务代码所期望的服务名称。当使用像Topshelf这样的通用包装器时,这个名称是可配置的,因此您只需确保在包装器配置和服务安装中使用相同的名称。对于其他服务可执行文件,服务名称可能是不可配置的,然后您只需知道它使用的名称。如果您想知道为什么需要这样做:可以在一个可执行文件中承载多个服务,以减少资源使用。当可执行文件启动时,它会向服务控制管理器提供它所承载的服务的列表。启动服务时,服务控制管理器会尝试将服务名称与可执行文件提供的服务列表相匹配。如果没有匹配项,则服务将在运行中丢失。如果没有此功能,SCM可以简单地假设可执行文件承载一个服务,而不需要匹配任何名称。与我面临的问题完全相同,它有帮助!