Назад | Перейти на главную страницу

Разрешение приложению CGI-EXE доступ к реестру

У меня есть приложение exe, которое я запускаю на IIS (из C:\inetpub\wwwwroot в DefaultAppPool) и ему требуется доступ к реестру, но он не работает, похоже, у него нет разрешения. Что странно, я запустил его в Windows 8, и он отлично работает, но на хостах Windows 7 и Server 2012 он не работает. Я знаю, что у ключей реестра есть разрешения, и я даже пытался установить Everyone к полному контролю, но все равно не получается. Я также пробовал оба HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE, не повезло.

Я читал о уровни доверия но я не уверен, что это, единственные ссылки, которые я мог найти, связанные с приложениями ASP. Есть ли что-то, что мне нужно добавить в web.config или в консоль управления IIS, чтобы мое приложение CGI могло получить доступ к реестру, в идеале под HKCU?

Редактировать: Пытался посмотреть, что происходит с Process Monitor, но я не вижу ни строчки об этом. Однако я написал этот быстрый Perl-скрипт, чтобы воспроизвести это:

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); }

И вывод:

Access is denied.

Так что должно быть некоторые способ разрешить CGI-скрипту получить к нему доступ, он работает на моем рабочем столе Win8.

После часы работая над этим, я понял, что разрешения реестра не имеют значения, когда дело доходит до сценариев CGI, даже с Все имея Полный доступ IIS по-прежнему блокирует его. Единственный способ, которым веб-приложение может получить доступ к реестру, - это запустить его как обычный пользователь, а не как IUSR.

Я написал пакетный сценарий, который назначает имя пользователя / пароль виртуальным каталогам, создает виртуальный каталог для моего веб-приложения и позволяет приложению запускаться:

@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']

Надеюсь, это будет полезно и другим.