Permitindo que um aplicativo CGI-EXE acesse o registro

1

Eu tenho um aplicativo exe que executo no IIS (de C:\inetpub\wwwwroot in DefaultAppPool ) e precisa acessar o registro, mas não funciona, parece que não tem permissão. O que é estranho é que eu corri no Windows 8 e funciona bem, mas nos hosts Windows 7 e Server 2012 ele não roda. Eu sei chaves de registro tem permissões e eu até tentei definir Everyone para controle total, mas ainda falha. Eu também tentei os dois HKEY_CURRENT_USER e HKEY_LOCAL_MACHINE , sem sorte.

Eu li sobre níveis de confiança , mas não tenho certeza de quais são essas, as únicas referências que encontrei relacionadas a aplicativos ASP. Existe algo que eu preciso adicionar ao web.config ou ao console de gerenciamento do IIS para permitir que meu aplicativo CGI acesse o Registro, de preferência sob o HKCU?

Editar: Tentei ver o que aconteceu com o Process Monitor, mas não consigo ver nenhuma linha sobre isso. No entanto, escrevi este rápido script Perl para replicar isto:

use strict;
use Win32API::Registry qw (:ALL);
print "Content-type: text/plain\n\n";

RegCreateKeyEx(HKEY_CURRENT_USER, "Software\TestingRegistryAccess", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, [], my $rh, []) or print regLastError();
if(defined($rh)) { RegCloseKey($rh); }

E a saída é:

Access is denied.

Portanto, tem que haver alguma maneira de permitir que um script CGI acesse isso, ele funciona na minha área de trabalho do Win8.

    
por Dendory 06.12.2014 / 01:10

1 resposta

1

Depois de horas trabalhando nisso, descobri que as permissões do Registro não importam quando se trata de scripts CGI, mesmo com Todos tendo Acesso total IIS ainda bloqueia isso. A única maneira que um aplicativo da Web pode acessar o registro é executando como um usuário normal, em vez de como IUSR .

Eu escrevi um script em lote que atribui um nome de usuário / senha a diretórios virtuais, cria um diretório virtual para meu aplicativo da web e permite que o aplicativo seja executado:

@echo off
set /p id="Username: "
set /p pass="Password: "
%windir%\system32\inetsrv\appcmd set site "Default Web Site" -virtualDirectoryDefaults.userName:%id% -virtualDirectoryDefaults.password:%pass%
%windir%\system32\inetsrv\appcmd add vdir /app.name:"Default Web Site/" /path:/nodepoint /physicalPath:"%CD%"
%windir%\system32\inetsrv\appcmd set config -section:isapiCgiRestriction /+[path='%CD%\app.exe',allowed='true',description='Web App']

Espero que isso seja útil para os outros também.

    
por 06.12.2014 / 17:54