1

我试图在我的 Windows 程序加载后预安装一个 .inf 驱动程序,并以这个问题为例。我在 VB.Net 中写作,而原始问题是在 C# 中完成的,所以这可能是我在翻译中丢失的东西,但这就是我所拥有的:

    Public Shared Function PreInstall(ByVal fileName As String, Optional ByVal useDefaultLocation As Boolean = True) As Boolean
        Try
            Dim file As String = IIf(useDefaultLocation, DriverLocation(fileName), fileName)
            Dim result As Int32 = DriverPackagePreinstall(file, 0) 'this is not working but I don't know why?!?
            Return (result = ERROR_SUCCESS OrElse result = ERROR_ALREADY_EXISTS)
        Catch ex As Exception
            My.Application.LogError(ex, New StringPair("Driver", fileName))
        End Try
        Return False
    End Function

    Private Shared ReadOnly Property DriverLocation(ByVal fileName As String) As String
        Get
            Return String.Format("{0}\Drivers\{1}", ApplicationDirectory(), fileName)
        End Get
    End Property

    Public Function ApplicationDirectory() As String
        If My.Application.IsNetworkDeployed Then
            Return My.Application.Deployment.DataDirectory
        Else
            Return Application.StartupPath
        End If
    End Function

    <DllImport("DIFXApi.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function DriverPackagePreinstall(ByVal DriverPackageInfPath As String, ByVal Flags As Int32) As Int32
    End Function

    Const ERROR_SUCCESS As Int32 = 0
    Const ERROR_ALREADY_EXISTS As Int32 = &HB7
    Const ERROR_ACCESS_DENIED As Int32 = &H5

我的 .inf 文件位于名为 Drivers 的目录中,并在应用程序文件中设置为必需的“数据文件”。我的应用程序是通过 ClickOnce 部署的;但是,我目前无法让它在我的本地机器上工作。

但是,当我逐步使用调试器并在 PreInstall 函数中调用 DriverPackagePreinstall 时,我得到 -536870347 作为 Int32 结果。我知道这没有意义,因为它应该是一个正错误代码或 0 (ERROR_SUCCESS)。我已经检查了 .inf 文件是否位于我期望的位置,并且我已经使用该文件位置和 WDK 构建环境运行了 DIFxCmd.exe \p,我得到了预期的结果。有谁知道为什么我会在我的申请中得到如此奇怪的结果?或者有没有人有另一种/更好的方式来安装带有 ClickOnce 应用程序的 .inf 驱动程序?

4

1 回答 1

3

如果将 -536870347 转换为十六进制,则会得到 0xe0000235 - 快速搜索发现这是在 setupapi.h 中定义的,ERROR_IN_WOW64解释如下

如果函数在 32 位应用程序中返回 ERROR_IN_WOW64,则该应用程序正在 64 位系统上执行,这是不允许的。

于 2011-04-13T00:39:48.797 回答