允许 CGI-EXE 应用程序访问注册表

允许 CGI-EXE 应用程序访问注册表

我有一个在 IIS 上运行的 exe 应用程序(来自C:\inetpub\wwwwrootDefaultAppPool,需要访问注册表,但它不起作用,似乎没有权限。奇怪的是,我在 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 桌面上运行。

答案1

小时在研究这个问题的过程中,我发现注册表权限对于 CGI 脚本来说并不重要,即使每个人具有完全访问IIS 仍然阻止它。Web 应用程序访问注册表的唯一方法是以普通用户身份运行,而不是以独立专家

我编写了一个批处理脚本,为虚拟目录分配用户名/密码,为我的 Web 应用程序创建一个虚拟目录,并允许该应用程序运行:

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

希望这对其他人也有用。

相关内容