1

Windowsプログラムのロード後に.infドライバーをプレインストールしようとしていますが、この質問を例として使用していました。元の質問がC#で行われている間に、VB.Netで書いているので、翻訳で失ったものかもしれませんが、これが私が持っているものです:

    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を呼び出すと、Int32の結果として-536870347が返されます。正のエラーコードまたは0(ERROR_SUCCESS)である必要があるため、これは意味がありません。.infファイルが期待どおりの場所にあることを確認し、WDKビルド環境でそのファイルの場所を使用してDIFxCmd.exe \ pを実行すると、期待どおりの結果が得られます。なぜ私が私のアプリケーションでそのような奇妙な結果を得るのか誰かが知っていますか?または、ClickOnceアプリケーションを使用して.infドライバーをインストールする別の/より良い方法がありますか?

4

1 に答える 1

3

-536870347を16進数に変換すると、0xe0000235になります。クイック検索では、これがsetupapi.hで次のように定義されていることがわかりERROR_IN_WOW64説明は次のとおりです。

関数が32ビットアプリケーションでERROR_IN_WOW64を返す場合、アプリケーションは64ビットシステムで実行されていますが、これは許可されていません。

于 2011-04-13T00:39:48.797 に答える