我创建了一个非常简单的应用程序+安装程序,它依赖于包含可移植的Firefox
最初,在安装过程中,我将一个Firefox可移植的zip文件提取到c:programdata<company><prod>firefox
,在尝试启动它时遇到了一个奇怪的错误。我花了一段时间,但我发现了原因,因为firefox
子目录中的所有文件都有一个调整过的安全设置。他们都有";完整性等级";设置为";低强制性水平";。完全相同的文件夹内容而没有该安全设置会使Firefox正常工作。
我在网上找不到任何关于Windows自动使c:programdata
文件使用完整性级别的文档:低强制级别。我猜Windows在直接在c:programdata
下创建/写入文件时可能会自动添加这一点?我确实验证了与MSI一起运行的安装助手exe(进行解压缩(是否使用提升的权限运行(用户:NT AUTHORITY\SYSTEM(。
我想我找到了解决办法。我没有直接将Firefox解压缩到c:programdata
下,而是在临时文件目录下创建了一个文件夹,在那里提取,然后发出Win32MoveFileEx()
调用,将该目录移动到c:programdata
下。这似乎奏效了,我认为这就是答案,并且已经完成了。不过,就在最近,我买了一台新电脑,尝试在这台新电脑上运行我的安装程序,当我的应用程序试图启动Firefox时,我再次遇到了同样的错误消息。我在CCD_ 8下检查了一下,Firefox exe有一个";低强制性水平";
此外,我尝试卸载我的应用程序,重新安装,现在它似乎可以工作(还没有添加"低强制级别"权限(。不过,时间会告诉我们要坚持多久。
有人知道这是怎么回事吗?最好的解决方案是什么?
我想知道每次启动应用程序时是否要运行cacls.exe
/icacls.exe
,以将文件安全设置重置为正常。不过,我的应用程序是在用户登录时运行并保持运行的,所以我不知道Windows在应用程序启动后再次更改安全设置的风险。理论上,如果必须的话,我想我可以在每次尝试启动Firefox之前运行cacls.exe
/icacls.exe
,但这听起来很难看。
根据强制完整性控制,当用户尝试启动可执行文件时,会使用用户完整性级别和文件完整性级别的最小值创建新进程。您可能需要改进unzip.exe或FileName.zip强制完整性
强制完整性控制(MIC(提供了一种控制对安全对象访问的机制,并在评估针对对象的自由访问控制列表(DACL(的访问检查之前评估访问。