0

我开发了一个使用 com dll 兑换的 Outlook 2003 加载项。我创建了一个 Visual Studio 2008 安装项目,添加了一个自定义操作来运行“caspol.exe -machine -addgroup 1 -strong -hex [key] -noname -noversion FullTrust -n \"Name\" -description \"desc\"并将软件下的注册表项移动到 HKLM,如http://msdn.microsoft.com/en-us/library/cc136646.aspx#AutoDeployVSTOse_InstallingtheAddinforAllUsers中所述,以确保所有用户的兼容性。

我使用 vsdrfCOMSelfReg 将 redemption.dll 包含在设置中(vsdrfCOM 抛出错误)。

我的问题是:在管理员帐户下的测试机器上安装安装程序时,它在所有用户下都运行良好,但是当我们使用在系统帐户下运行的公司范围的软件部署时,安装程​​序会执行,但加载项不会加载。如果我再次使用管理员帐户修复安装,它加载就好了。系统帐户不应该具有安装所有组件所需的权限吗?我有什么选择?感谢您的任何建议。

4

2 回答 2

0

在系统帐户下运行安装后,您是否看到 HKCR 中的 Redemption 注册表项?例如 HKEY_CLASSES_ROOT\Redemption.RDOSession ?

于 2010-04-07T15:10:20.343 回答
0

经过几个无尽的夜晚,我终于找到了问题所在。这真的是关于代码访问安全和 caspol.exe 部署 Outlook 2003 加载项的一些技巧(Outlook 2007 不同)。首先,在您的测试客户端上,确保设置 Windows 环境变量 VSTO_LOGALERTS=1,因为这会将加载项的所有错误写入位于目标安装目录的日志文件中。同样重要的是要知道,如果您的加载项在启动过程中引发异常,它将在下次启动 Outlook 时在注册表中被禁用(请参阅此处What can cause Outlook to change a COM-addin's LoadBehavior to 2 -除了未处理的异常?)。当您不知道时,这可能会引起一些混乱。

现在让我们继续讨论 caspol 问题。请务必先使用强名称密钥对您的程序集进行签名。接下来,您需要确保您的程序集获得客户的完全信任。为此,您可以使用以下设置运行 caspol.exe:“caspol.exe -machine -addgroup 1 -strong -hex [key] -noname -noversion FullTrust -n \"Name\" -description \"desc\" . 使用这些参数,您将更早地给予所有使用您的密钥签名的程序集,完全信任机器。这比给予整个目录 FullTrust 好得多。

在生产环境中,您肯定希望为您的加载项创建一个设置。您还可以为您的安装项目创建一个自定义操作,以自动执行所有 caspol 工作。您可以使用此处提供的示例代码“ http://msdn.microsoft.com/en-us/library/cc136646.aspx#AutoDeployVSTOse_CreatingtheCASPolicy ”,但请注意:在 caspol 参数中检查 -pp off。如果策略更改提示打开,那么您的自动安装将失败,因为它需要用户交互。将 -pp 设置为关闭,执行策略并将其重新打开。再次注意:示例代码不会等待进程退出。

在我弄清楚所有这些之后,插件的部署很容易,即使对于“所有用户”安装也是如此。希望对任何人都有帮助。

于 2010-04-22T17:31:40.860 回答