Erro 193: não é um aplicativo Win32 válido ao iniciar um serviço do Windows

Se um serviço do Windows falhar ao iniciar com o erro 193 “Não é um aplicativo Win32 válido”, geralmente isso ocorre devido a espaços em branco no binpath, que o sc.exe interpreta como argumentos separados. Este artigo mostra a causa e três soluções práticas.

Se ao iniciar um serviço do Windows aparecer o erro 193 “Aplicação Win32 não permitida”, geralmente é porque o Gerenciador de Serviços do Windows não consegue localizar o serviço. Isso acontece devido à forma como o Gerenciador de Serviços do Windows trata os argumentos de linha de comando. O erro 193 ocorre, por exemplo, quando o nome de um diretório contém um espaço (por exemplo, C:\Users\Fridolin Froehlich) e há um arquivo no diretório superior (C:\Users) cujo nome é a primeira palavra do diretório (por exemplo, “C:\Users\Fridolin”). Parece complicado – por isso, vejamos um exemplo:

Exemplo:

Nosso usuário se chama “Fridolin Froehlich” e seu diretório home é C:\Users\Fridolin Froehlich

Mas dentro do diretório Users também existe um arquivo chamado Fridolin

O serviço do Windows criado está localizado no diretório C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin

Registramos o serviço Windows no PowerShell com direitos de administrador usando o comando:
sc.exe create "Mein Windows-Service" binpath="C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin\Mein Windows-Service.exe"

Depois, recebemos a confirmação da criação do serviço Windows:

[SC] CreateService SUCESSO

IMPORTANTE: Esta mensagem de sucesso não garante que o serviço será realmente encontrado e iniciado pelo Gerenciador de Serviços do Windows.

Agora tentamos iniciar o serviço:

sc.exe start "Mein Windows-Service"

Imediatamente recebemos uma mensagem de erro: [SC] StartService NÃO BEM-SUCEDIDO, Erro 193.

Erro 193 – A Causa

Ao criar o serviço do Windows, de fato colocamos o binpath entre aspas, mas o Windows utiliza apenas o texto dentro das aspas para definir o caminho do serviço. Isso pode ser observado quando você abre o Gerenciador de Serviços (pesquisando ou digitando services.msc na linha de comando) e visualiza os detalhes do serviço. Lá, o caminho aparece assim:

C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin\Mein Windows-Service.exe

Ou seja, as aspas estão ausentes. Por isso, o gerenciador de serviços tenta encontrar e executar o arquivo C:\Users\Fridolin. Como é sabido, argumentos de linhas de comando são separados por espaço, então o binpath para o gerenciador de serviços do Windows parece ser dois (!) argumentos.

 

Como resolver o erro 193 ao iniciar um serviço do Windows?

  • Opção A: Adicionar aspas ao binpath

    Esta é a solução mais limpa. Para evitar o erro 193 ao iniciar um serviço do Windows, coloque aspas escapadas no binpath:

    sc.exe create "Mein Windows-Service" binpath="\”C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin\Mein Windows-Service.exe\”"

    O importante aqui é usar a barra invertida (\) antes das aspas adicionais.
  • Opção B: Localizar e renomear o arquivo problemático

    No exemplo acima, o arquivo C:\Users\Fridolin é o problema. Se você ainda precisar desse arquivo, basta renomeá-lo. Basta adicionar uma extensão ao arquivo (por exemplo, .txt). Isso pode ser feito com o comando ren C:\Users\Fridolin C:\Users\Fridolin.txt.

    Se você não precisar mais do arquivo, pode simplesmente apagá-lo com o comando del C:\Users\Fridolin

  • Opção C: Escolher outro diretório para salvar o serviço do Windows

    Geralmente, o diretório do usuário (neste caso, C:\Users\Fridolin Froehlich) é o problema, pois geralmente possui mais de uma palavra (nome e sobrenome). Portanto, precisamos procurar ou criar um diretório fora do diretório do usuário. Por exemplo, C:\Projekte\Mein Windows-Service. Este diretório pode ser criado com o comando md "C:\Projekte\Mein Windows-Service"

    Depois, copie o nosso executável do serviço äh Service-Exe para este diretório: copy "C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin\Mein Windows-Service.exe" "C:\Projekte\Mein Windows-Service\"

O que fazer se aparecer a mensagem de erro “Set-Content : Nenhum parâmetro posicional foi encontrado que aceite o argumento “binpath=”“?

Esse erro ocorre ao usar apenas o comando sc no PowerShell em vez de sc.exe.

O comando sc no Windows PowerShell executa o Cmdlet “Set-Content”. Mas isso não é o que precisamos. Precisamos do sc.exe – um programa de linha de comando para comunicar com o Gerenciador de Controle de Serviços e com os serviços do Windows.

Fontes

How to: register service with SC command without losing quotes in binpath value

When creating a service with sc.exe how to pass in context parameters?

 

Aviso de cookies do WordPress by Real Cookie Banner