即使有command-line commands開始(?大部分的)各種控制面板屏幕,在Windows 10,一個特定的場景似乎失敗:Windows進程啓動靜靜地失敗 - 在某些情況下無法啓動藍牙設置
如果機器在關閉藍牙(未禁用)的情況下啓動,則運行應打開藍牙設置屏幕的命令不會執行任何操作。該命令可以是毫秒設置:藍牙,bthprops.cpl或毫秒設置:藍牙。
我也試過直接啓動藍牙設備屏幕(使用命令%WINDIR%\ explorer.exe的外殼::: {28803F59-3A75-4058-995F-4EE5503B023C}爲described here),但點擊在這個窗口中的「藍牙設置」也沒有任何作用。
直接獲得藍牙設置屏幕,而無需通過主控制面板窗口,而無需首先打開藍牙去的唯一途徑,是通過右鍵單擊在Windows操作中心的相關瓦:
儘管這看起來像是操作系統級別的bug,但我想知道是否有任何方法可以知道在C#代碼中啓動失敗的時間。所以我嘗試過使用下面的代碼:
try
{
var process = new Process();
process.StartInfo.FileName = "control";
process.StartInfo.Arguments = "bthprops.cpl";
process.Exited += (s, e) =>
{
if (process.ExitCode != 0)
{
TurnOnBt();
}
};
var res = process.Start();
if (!res)
{
TurnOnBt();
}
}
catch (System.Exception ex)
{
int test = 6; // just for breakpoint
}
問題是,沒有例外被拋出,大部分時間Process.Exit事件從未被調用過。
此外,致電Windows.Devices.Radios.Radio.GetRadiosAsync()返回一個空列表!
目前我發現的唯一解決方案是手動打開藍牙 - 它不會改變Process.Start/Exit行爲,但它確實允許成功地午餐命令以直接打開藍牙設置窗口,並且獲取機器的藍牙/無線電設備列表。但是,當關閉藍牙並重新啓動機器時,同樣的問題會再次發生。
基於代碼的解決方法的任何想法?
適當的工具具有殼顯示其對話框是[的ShellExecuteEx]( https://msdn.microsoft.com/en-us/library/windows/desktop/bb762154.aspx)。作爲額外的好處,此API調用返回錯誤代碼。 – IInspectable
'控制bthprops.cpl'成功啓動(所以你並沒有得到任何錯誤)啓動'rundll32.exe Shell32.dll,Control_RunDLL bthprops.cpl,'並且無錯地退出。 'Control_RunDLL'加載'bthprops.cpl'並調用['CPlApplet(0,CPL_INIT,0,0)'](https://msdn.microsoft.com/en-us/library/windows/desktop/bb787978(v = vs.85)的.aspx)。服務'bthserv'的'CPlApplet'查詢狀態 - 如果沒有運行 - 返回false和故事結束。如果'bthserv'沒有運行,'bthprops.cpl'不需要工作 – RbMm
@RbMm謝謝!你能分享一下你用來獲得流量的工具嗎?此外,與點擊操作中心時發生的情況有何不同? –