即使有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谢谢!你能分享一下你用来获得流量的工具吗?此外,与点击操作中心时发生的情况有何不同? –