我在wine下使用visual C ++ 2009。 我已经为命令行操作(cl.exe,link.exe等)正确设置了所有路径,并且可以正常编译正常程序。但是,当我提供-Zi或-ZI标志以包含调试信息时,程序退出并显示错误:
:致命错误C1902:程序数据库管理器不匹配;请检查您的安装
我在路径中拥有所有必需的dll和exe: mspdb80.dll,mspdbcore.dll,mspdbsrv.exe
我甚至确保使用本机窗口dll来尝试该程序,而不仅仅是wine的版本,例如:msvcr90.dll和msobj90.dll以及msvcp90.dll,但它没有任何区别。
但是:奇怪的是 - 我可以手动成功启动服务器而不会出现错误:
C:mspdbsrv.exe -start -spawn -shutdowntime -1
所以...不是服务器程序本身有不匹配,但是当cl.exe尝试与服务器通信时出现某种错误;例如:因为即使mspdbsrv.exe已经运行,运行cl.exe也会出现完全相同的故障。 (无论如何,排除混合版本 - 这是一个干净的安装)。
我在网络上找到此错误的唯一可能的原因是:quoted
它试图冒充,但它看起来好像没有必要 致电LsaLogonUser。因此,错误的SID作为主要标记在令牌中 用户。根据filemon,调试服务器调用secur32,这表明 它正在进行解释性访问控制。它找到服务的SID 而不是通过RPC获得的令牌中的某个插槽中的用户SID,以及 然后一切都从那里走下坡路。
为什么VS认为需要将PDB访问放在一个单独的进程中 单独的访问权限是非常令人费解的,但它确实存在。 ......
所以 - 我认为我可能正在寻找的是一些命令行工具/源代码来回答以下问题 - 但我不知道从哪里得到它们。
1)如何检查服务器正在运行的身份验证/登录会话类型以及cl.exe实际需要的内容。我有processexplorer,它说手动运行时mspdbsrv.exe具有以下安全性 - 但我不知道这是否是足够的信息(我是Windows安全新手。)
User: darkstar\andrew3
SID:S-1-5-21-0-0-0-1000
Session:0
Logon Session: 0
...Group... ...Flags...
BUILTIN\Administrators Owner
BUILTIN\Users Mandatory
Everyone Mandatory
LOCAL Mandatory
Logon SID (S-1-5-5-0-1) Mandatory
NT AUTHORITY\Authenticated Users Mandatory
NT AUTHORITY\INTERACTIVE Mandatory
Group SID is: S-1-5-4
....privelege.... ...flags....
SeChangeNotifyPrivilege Default Enabled
SeSecurityPrivilege Disabled
SeBackupPrivilege Disabled
SeRestorePrivilege Disabled
SeSystemtimePrivilege Disabled
SeShutdownPrivilege Disabled
SeRemoteShutdownPrivilege Disabled
SeTakeOwnershipPrivilege Disabled
SeDebugPrivilege Disabled
SeSystemEnvironmentPrivilege Disabled
SeSystemProfilePrivilege Disabled
SeProfileSingleProcessPrivilege Disabled
SeIncreaseBasePriorityPrivilege Disabled
SeLoadDriverPrivilege Default Enabled
SeCreatePagefilePrivilege Disabled
SeIncreaseQuotaPrivilege Disabled
SeUndockPrivilege Disabled
SeManageVolumePrivilege Disabled
SeImpersonatePrivilege Default Enabled
SeCreateGlobalPrivilege Default Enabled
但是我不知道哪些权限对于判断服务器是否已登录或者仅仅是某种模拟模式很重要。哪些值很重要?
2)如何更改/设置当前登录类型? (我发现,例如:lsalogon example,但由于缺少标题,包含等而无法编译...更何况,我不确定要使用的登录名/密码。是登录darkstar \ andrew3罚款,还是需要创建一些特殊的管理员帐户?
3)有没有人知道一个非常简单的程序(源代码),我可以从mingw编译,以便能够访问microsoft的pdb服务器?因为如果我有一个可以使用mingw / gcc / g ++编译的程序 - 我可以使用GDB确切地找出触发错误消息的内容......但我无法使用gdb调试cl.exe值得一试;我真的需要一些源代码......
任何帮助,非常感谢。
答案 0 :(得分:0)
错误的错误消息可能是由于wine没有正确处理mspdbsrv.exe的RPC / login而引起的;例如:如果没有安装额外的软件包winbind - 因为基于登录的安全性/ RPC似乎部分由samba处理。
因此,当使用-start -spawn从命令提示符正确启动mspdbrv.exe时,但cl.exe报告的版本错误;可能的解决方案就是为你的系统安装SAMBA二进制文件(我使用的是一个Linux slackware软件包,甚至没有打扰配置samba,或者启动它......)一旦安装了winbindd二进制文件,wine会正确地完成其余的操作。 exe完全按预期生成pdb文件。