有没有办法使用NSIS在Win10中安装一个可以读取C:\Windows的应用程序?
Is there a way to use NSIS to install an app in Win10 that can read C:\Windows?
我们有一个拥有大量安装基础的应用程序。长话短说,在有限的时间内,一些新的 Win10 系统需要像 Win7 系统一样存储它们的数据——在 C:\windows 中(这是不可协商的,而且是临时的——我知道这是不好的形式,但这是一个临时解决方法)。
为了做到这一点,我假设我们需要让 NSIS 设置兼容模式,或者设置提升的用户权限。但我对其他选择持开放态度。
谢谢!
在 Windows 7 和过去 25 年发布的所有其他 Windows 版本中也是错误的。
虽然可以为所有用户提供对 %windir% 的写入权限,但这是一个巨大的安全问题,我不推荐这样做。
您最好的选择是修改您的应用程序,使其 requests UAC elevation in its manifest. If the application does not already have a embedded manifest (not requesting ComCtl32 v6 etc.) then you can theoretically use a external .manifest file。
一个不太理想的解决方案是设置兼容性标志:
!include x64.nsh
${If} ${IsWow64}
SetRegView 64
${EndIf}
WriteRegStr HKLM "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$InstDir\MyApp.exe" "RUNASADMIN"
SetRegView Default
Application compatibility layers are there for the customer, not for the program 但我想我们在尝试遵循 Microsoft 指导方针方面已经过去了。
我们有一个拥有大量安装基础的应用程序。长话短说,在有限的时间内,一些新的 Win10 系统需要像 Win7 系统一样存储它们的数据——在 C:\windows 中(这是不可协商的,而且是临时的——我知道这是不好的形式,但这是一个临时解决方法)。
为了做到这一点,我假设我们需要让 NSIS 设置兼容模式,或者设置提升的用户权限。但我对其他选择持开放态度。
谢谢!
在 Windows 7 和过去 25 年发布的所有其他 Windows 版本中也是错误的。
虽然可以为所有用户提供对 %windir% 的写入权限,但这是一个巨大的安全问题,我不推荐这样做。
您最好的选择是修改您的应用程序,使其 requests UAC elevation in its manifest. If the application does not already have a embedded manifest (not requesting ComCtl32 v6 etc.) then you can theoretically use a external .manifest file。
一个不太理想的解决方案是设置兼容性标志:
!include x64.nsh
${If} ${IsWow64}
SetRegView 64
${EndIf}
WriteRegStr HKLM "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$InstDir\MyApp.exe" "RUNASADMIN"
SetRegView Default
Application compatibility layers are there for the customer, not for the program 但我想我们在尝试遵循 Microsoft 指导方针方面已经过去了。