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 arquivoC:\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 comandoren C:\Users\Fridolin C:\Users\Fridolin.txt.
Se você não precisar mais do arquivo, pode simplesmente apagá-lo com o comandodel 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 comandomd "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?