2012-12-19 50 views
2

我正在使用inno-setup來安裝需要在Win7上解除阻止端口4326(允許acl訪問)的程序,以便GET操作可以通過HTTP到端口4326 。netsh acl設置(需要替代方法 - 註冊表設置?)

我有一個管理員可以運行以取消阻塞端口的powershell腳本。但是這不能用作inno-setup [run]命令(因爲本地機器通常禁止腳本運行)。 (即powershell.exe -nowait & script.ps1)

在目標機器中是否有一些註冊表項可以設置,以解除阻塞端口?自從setup.exe以管理員身份運行後,我可以在inno-setup中輕鬆完成任務。我想一個自包含的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 
+0

如果這是您的所有腳本,您可以直接從安裝程序[運行] netsh.exe。 – jachguate

+0

這是一個好主意。但是,如何從inno-setup的內部獲取用戶名/域名?我使用臨時提升的privilidges(admin)運行setup.exe。我在用戶名的inno-setup中看到一個常量:{username} 正在運行安裝程序或卸載程序的用戶的名稱(由GetUserName函數返回)。 –

+0

我不想爲所有用戶打開它,只是一個運行安裝程序的用戶。 –

回答

0

我認爲你可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\

建議找到防火牆規則: 也許你可以導出此鍵爲.reg然後將其導入其他站。

+1

這是一個糟糕的主意,直接混淆註冊表項,除非你沒有別的選擇 - 微軟不保證在未來的Windows版本中保持這一點,不像API。 – Miral

0

而不是使用netsh,而是使用WinApi HttpSetServiceConfiguration。您可以直接從Inno的[Code](具體來說,在CurStepChanged(ssPostInstall))中調用此(及其相關功能),給出正確的原型聲明。請參閱幫助文件中的Using DLLs主題。