我试图获得this microsoft kb article建议的Office程序的安装路径(因为Office开始菜单快捷方式不再指向路径;谢谢Microsoft)。
当然,KB示例使用C ++和本机库,我试图在VB.NET中使用以下代码进行复制
<Runtime.InteropServices.DllImport("msi.dll")> Public Shared Function MsiLocateComponent(szComponent As String, ByRef lpPathBuf As Char(), ByRef pcchBuf As Integer)
End Function
我从下面调用此函数,我希望返回一个至少包含点的消息框(如果其余的失败)。相反,我什么都没得到,所以我认为代码会遇到某种错误(虽然因为我没有例外,但它是沉默的。)
Shared Function DealWithWinInstallerPath(ProgramPath As String) As String
Dim sPath(300) As Char
Dim sSize As Integer = 300
Dim state As Integer = MsiLocateComponent("{019C826E-445A-4649-A5B0-0BF08FCC4EEE}", sPath, sSize)
MsgBox(state & ".")
End Function
(请注意,该函数有一个将在未来使用的参数,但其内容仅用于测试目的。)
我是否错误地宣布了该功能?传递错误的论点? msi.dll不是库的正确名称吗? msdn database也无济于事。
答案 0 :(得分:2)
对于托管代码,Windows Installer XML(WiX)部署工具基础(DTF)中的Microsoft.Deployment.WindowsInstaller互操作程序集是可行的方法。 DTF的ComponentInstallation类有一个名为Path的只读属性,它封装了对MsiLocateComponent()的调用
安装完成后,您可以在C:\ Program Files(x86)\ WiX Toolset v3.8 \ SDK中找到DLL。
您还可以阅读源代码,了解有关如何进行P / Invoke MSI API调用的指针。
答案 1 :(得分:1)
如果您阅读MSDN文档,则首选MsiGetComponentPath,此处有一个互操作示例: