对非本地管理员 Windows 用户使用模拟时,DLL 引用失败并显示“访问被拒绝”
-
20-08-2019 - |
题
我们有一项使用 WCF 和模拟的服务。
用户可以使用属于 Active Directory 系统的凭据登录到客户端应用程序。
用户登录是模拟服务端的。
当登录的用户在其主机上设置为本地管理员时,这可以正常工作。
但当他们是非特权(标准)用户时就会出现问题。我们收到一个异常,指出访问被拒绝“我们的 DLL 之一”。(我们所有的 DLL 都会发生这种情况)
解决方案
这其实就是一个简单的部署环境的权限问题。
使用 代码访问安全策略工具 (Caspol.exe) 这只是应用正确权限的问题。有一个如何使用指南 msdn.
实际的命令行字符串是
CasPol.exe -addgroup 1 -strong -file D:\deployment_location\WcfServiceHost.exe -noname -noversion FullTrust
这是在服务集合上执行的。由于我们的版本号经常更改,因此使用“noversion”很有帮助,因此该服务在我们的设置中还需要 FullTrust。
要对各种计算机重新使用修复程序,请创建 PowerShell 脚本(或批处理文件)并使用“polchgprompt”参数关闭提示,以便脚本可以在无需干预的情况下执行。
polchgprompt - “启用或禁用每当使用会导致策略更改的选项运行 Caspol.exe 时显示的提示。”
脚本结构:
CasPol.exe -polchgprompt off
--all the individual service calls--
CasPol.exe -addgroup 1 -strong -file D:\deployment_location\WcfServiceHost.exe -noname -noversion FullTrust
...
CasPol.exe -polchgprompt on
不隶属于 StackOverflow