2012-05-31 125 views
0

我目前正在尋找一種方法來列出遠程藍牙設備公開的服務並啓用它們。使用WMI列出並啓用禁用的藍牙服務?

通常我會使用WindowsAPI函數(或更可能是已知的包裝器之一)列出服務並通過GUID(SetServiceEnable)啓用它們。

問題是,該設備暴露兩個具有相同GUID的服務!

因此,使用windowsAPI函數僅啓用其中一項服務。其他服務無法啓用。

我想也許可以WMI做的伎倆,但我還是新的WMI,但沒有找到任何

Windows本身能夠同時啓用,沒有或特定的服務在servicemenu。

UPDATE 我想解決的問題是能夠啓用第一個或第二個服務。現在只有第一個服務(通常是我需要的服務),但我找不到啓用第二個服務的解決方案(除了使用Windows UI)。

如果兩個服務都啓用,我在devicemanager(SPP)中有兩個Commports。

回答

-1

因爲我不能添加評論/問題(還沒有在stackoverflow特權)。這是我最好的。

如果我理解正確,在服務記錄中多次使用該服務是無效的,對嗎?你可以在藍牙配對UI中右鍵點擊設備,看看你是否看到兩種服務,並且你可以通過Windows UI啓用它們?一旦啓用它們,您是否會在設備管理器(通過連接查看)中看到該設備下的兩個PNP devnode與您啓用的兩個服務的相應角色相對應? (我不能這樣做,因爲我不知道我有兩個相同UUID的設備。)

正如您可能已經知道的那樣,當您在遠程設備上啓用服務時,實際上並未啓用該服務通過Windows藍牙API在遠程設備上。你正在做的是告訴Windows中的核心藍牙組件,以產生相應的服務角色。 (這是BluetoothSetLocalServiceInfo的作用)。例如,如果遠程設備支持A2DP接收器,則通過啓用該服務,桌面上的藍牙服務將爲該設備註冊一個A2DP源服務,該服務會生成一個PNP devnode,以便將A2DP源驅動程序與安裝在該devnode上。通過禁用該服務,藍牙服務將取消註冊A2DP源devnode,並刪除PNP devnode(有點像拔掉USB設備)。

根據您看到重複的配置文件,設備對象和驅動程序對象的兩個實例在遠程設備的相同mac地址上匹配可能沒有意義。

我的答案(實際上不回答你的問題)是檢查是否對在桌面上使用桌面上的驅動程序啓用的兩種服務有效。例如,一捆A2DP和HFP需要A2DP和HFP同步某些行爲,例如AVDTP掛起。根據實施和驅動程序的不同,他們可能並不期望安裝了兩個A2DP驅動程序實例,從而導致本地驅動程序發生意外狀態。

+0

_Windows本身能夠在服務菜單上同時啓用這兩種服務,沒有任何服務或特定服務。我沒有看過設備管理員。不幸的是,我現在正在度假,直到下週才能測試任何東西。順便說一句:這是一個我們使用的FTDI藍牙芯片,它暴露了兩個稱爲** SPP **和** AToverSPP **的SPP。另見更新。 – AlexS

+0

然後我會認爲有一種方法可以通過編程來實現。但是,爲什麼您認爲WMI是您的解決方案?我可能會錯過一些東西。 – yuklai

+0

我認爲WMI可以通過一種**方式來實現。但在檢查Windows Bluetooth-API時,我沒有找到實現我的目標的方法。 – AlexS