错误:文件被数字签名策略拒绝(File was rejected by digital signature policy)

本文介绍了解决在安装大型软件包如VisualStudio2005SP1和WindowsMobile6ProfessionalSDK时遇到的“文件被数字签名策略拒绝”错误的方法。通过调整注册表中的PolicyScope值,确保了WindowsInstaller能够正确验证大型文件的数字签名。

问题描述:
这两天给家里的台式机装上了 Windows Server 2003 R2 SP2,在安装 Visual Studio 2005 SP1 和 Windows Mobile 6 Profesional SDK 的时候,都遇到了“文件被数字签名策略拒绝”的错误。经过google,找到了解决方法,并成功解决了该问题,现提供给遇到同样问题的朋友参考。

原因分析:
Visual Studio 2005 SP1 的.msp 修补程序包和 Windows Mobile 6 Profesional SDK 的.msi安装程序包的文件都比较大,分别是451MB和454MB。我的台式机的内存是1GB,运行安装程序之前内存只剩下400MB了。当运行安装程序时,Windows Installer 会验证程序包的数字签名以确保程序包没有被篡改。这时整个程序包被加载到内存中,计算机必须拥有程序包大小所需的足够连续内存。如果计算机没有足够的连续内存,则会出现错误。由于出现错误,Windows Installer 将无法验证是否对该程序包正确地进行了签名。

解决方法:
在运行安装程序之前,修改 HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers 注册表项下面的 PolicyScope 的注册表值,将值从0改为1。如果没有这个注册表值,可以自己新建一个“DWORD 值”,命名为 PolicyScope,并将它的值设置为1即可。安装完成后,再将该注册表值改为原来的0。
为了日后使用方便,可以创建两个注册表项文件 SetPolicyScope.reg 和 ResetPolicyScope.reg,并用记事本打开进行编辑,内容分别为(虚线以内):

SetPolicyScope.reg
------------------------------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\windows\safer\codeidentifiers]
"PolicyScope"=dword:00000001
------------------------------------------------------------------------------------------------

ResetPolicyScope.reg
------------------------------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\windows\safer\codeidentifiers]
"PolicyScope"=dword:00000000
------------------------------------------------------------------------------------------------


参考:http://support.microsoft.com/kb/925336

### 解决远程仓库拒绝推送 master 分支的问题 当尝试将本地 `master` 分支推送到远程仓库时,如果遇到拒绝推送(`rejected`)的情况,通常是因为本地分支和远程分支之间存在冲突。以下是一些解决方法: #### 方法一:强制推送 可以使用 `-f` 参数进行强制推送: ```bash git push -u origin master -f ``` 这种方法会直接覆盖远程仓库的内容,可能导致远程的修改丢失。因此,除非在单人开发环境中且确认远程修改无用,否则不推荐使用此方法[^1]。 #### 方法二:先拉取远程修改再推送 可以通过 `git pull` 命令将远程仓库的修改合并到本地分支,然后再推送: ```bash git pull origin master git push -u origin master ``` 如果提示无法合并无关的历史记录,可以添加 `--allow-unrelated-histories` 参数: ```bash git pull origin master --allow-unrelated-histories git push -u origin master ``` 此方法确保了本地和远程分支的同步,并保留了所有历史记录[^3]。 #### 方法三:创建新分支推送 如果不想合并远程和本地的修改,可以选择创建一个新的分支并将本地修改推送到该分支: ```bash git branch new-branch-name git checkout new-branch-name git push -u origin new-branch-name ``` 这种方式避免了直接修改远程主分支的风险,适用于需要保留当前分支状态的场景[^1]。 #### 方法四:重新基底(Rebase) 通过 `rebase` 将本地修改应用到远程分支的最新版本之上: ```bash git fetch origin git rebase origin/master git push -u origin master ``` 此方法能够保持提交历史的线性结构,但需要注意解决可能的冲突[^2]。 ### 注意事项 - 在多人协作开发中,建议优先使用方法二或方法四,以确保团队成员的工作不会被覆盖。 - 如果不确定远程仓库的状态,可以先执行 `git fetch` 查看远程分支的更新情况。 - 使用 `git log` 或 `git diff` 检查本地与远程分支的差异,以便更好地理解冲突原因。 ```bash git log origin/master..master git diff origin/master..master ``` ### 示例代码 以下是一个完整的流程示例,展示如何通过 `pull` 和 `push` 解决冲突: ```bash # 切换到 master 分支 git checkout master # 拉取远程修改并合并 git pull origin master --allow-unrelated-histories # 解决冲突(如果有) # 修改冲突文件后执行以下命令 git add . git commit --no-edit # 推送修改到远程仓库 git push -u origin master ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值