我有一个exe应用程序,我在IIS上运行(从DefaultAppPool C:\inetpub\wwwwroot ),需要访问registry,但它不工作,似乎没有权限。 有什么奇怪的是我在Windows 8上运行它,它工作正常,但在Windows 7和Server 2012的主机,它不运行。 我知道registry项有权限,我甚至试图设置Everyone完全控制,但仍然失败。 我也尝试了HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE ,没有运气。
我确实了解了信任级别,但是我不确定这些信息是什么,只有我可以find与ASP应用相关的参考信息。 有什么我需要添加到web.config或IISpipe理控制台允许我的CGI应用程序访问registry,最好在HKCU?
编辑:试图看看过程监视器发生了什么,但我看不到任何线。 但是我写了这个快速的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桌面上运行。
经过几个小时的工作,我发现registry权限对于CGI脚本来说并不重要,即使拥有完全访问 IIS的每个人仍然会阻止它。 Web应用程序访问registry的唯一方法是以普通用户身份运行,而不是以IUSR身份运行。
我写了一个批处理脚本,将用户名/密码分配给虚拟目录,为我的Web应用程序创build一个虚拟目录,并允许应用程序运行:
@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']
希望这对其他人也有用。