Powershell netsh acl设置(是否需要替代方法-注册表设置?)

Powershell netsh acl设置(是否需要替代方法-注册表设置?),powershell,registry,inno-setup,acl,netsh,Powershell,Registry,Inno Setup,Acl,Netsh,我正在使用inno安装程序安装一个程序,该程序需要在Win7上取消阻止端口4326(允许acl访问),以便可以通过HTTP对端口4326执行GET操作 我有一个powershell脚本,管理员可以运行该脚本来解除端口阻塞。但这不能作为inno setup[run]命令使用(因为本地计算机通常禁止脚本运行)。(即powershell.exe-nowait&script.ps1) 目标计算机中是否有我可以设置的一些注册表项可以解除端口阻塞?由于setup.exe是以管理员的身份运行的,所以我可以在i

我正在使用inno安装程序安装一个程序,该程序需要在Win7上取消阻止端口4326(允许acl访问),以便可以通过HTTP对端口4326执行GET操作

我有一个powershell脚本,管理员可以运行该脚本来解除端口阻塞。但这不能作为inno setup[run]命令使用(因为本地计算机通常禁止脚本运行)。(即powershell.exe-nowait&script.ps1)

目标计算机中是否有我可以设置的一些注册表项可以解除端口阻塞?由于setup.exe是以管理员的身份运行的,所以我可以在inno安装程序中非常轻松地完成这项任务。我想一个独立的EXE也可以做同样的事情

下面是我想用在HKLM中设置注册表设置来替换的脚本

set-alias netsh c:\Windows\System32\netsh.exe
$PORT = 4326
$domain = $Env:userdomain
$name = $Env:username
$ErrorActionPreference = "Continue";

netsh http delete urlacl url=http://*:$PORT/
netsh http add urlacl url=http://*:$PORT/ user=$domain\$name

我想您可以在
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\

建议:
也许您可以将此密钥导出为.reg并在另一个工作站上导入。

使用WinApi代替
netsh
。如果原型声明正确,您可以直接从Inno的
[code]
(特别是在
CurStepChanged(ssPostInstall)
中)调用此函数(及其相关函数)。请参阅帮助文件中的主题。

有关此问题的继续部分,请参阅。但我基本上认为,jachguate关于在安装后运行netsh.exe的回答似乎是正确的。

如果这就是您的全部脚本,您可以直接从安装程序中[运行]netsh.exe。这是一个好主意。但是,如何从inno安装程序内部获得用户名/域?我正在使用临时提升权限(管理员)运行setup.exe。我在inno安装程序中看到一个常量,用于用户名:{username}运行安装程序或卸载程序的用户的名称(由GetUserName函数返回)。我不想为所有用户打开此文件,只为运行安装程序的用户打开此文件。如果是这样,请编写一个简单的bat脚本(对于该简单脚本,您确实不需要powershell)并用计算机运行它。如果您真的只想为当前用户执行此操作,请注意当用户从shell中选择“以管理员身份运行”以启动您的安装程序时,runasoriginaluser的限制。我想说,运行netsh.exe就是答案。但我有一个问题。我不知道这是否是正确的礼节,但我把它作为一个新问题发布在:除非你别无选择,否则直接处理注册表项是个坏主意——微软不保证在未来版本的Windows中保持这种功能,不像API。