gpt4 book ai didi

winapi - 无法从启动时启动的应用程序打开 COM1

转载 作者:行者123 更新时间:2023-12-04 08:50:15 26 4
gpt4 key购买 nike

我正在使用 WinLIRC红外接收器连接到 Windows 7 x64 上的串行端口 COM1。 WinLIRC已添加到启动文件夹(开始->所有应用程序->启动),因此每次登录时它都会启动。经常(但不是所有时间)我看到来自 WinLIRC 的初始化错误消息,如果我重试初始化,它会持续一段时间(几分钟),并且在一些重试之后它会正确初始化并且工作正常。如果我从 Startup 中删除它并在任何其他时刻手动启动它,它就会启动而不会出错。

我已经下载 WinLIRC来源并添加 MessageBox在这里和那里调用,以便我可以看到初始化期间会发生什么,并发现 CreateFile调用失败:

if((hPort=CreateFile(
settings.port,GENERIC_READ | GENERIC_WRITE,
0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0))==INVALID_HANDLE_VALUE)
{
char buffer[256];
sprintf_s(buffer, "CreateFile(%s) failed with %d", settings.port, GetLastError());
MessageBox(NULL, buffer, "debug", MB_OK);
hPort=NULL;
return false;
}

我看到消息框说“CreateFile(COM1) failed with 5”,根据 this link,5 是“拒绝访问”错误的错误代码。 .

所以问题是为什么在启动 Windows 后打开 COM 端口会失败并出现此类错误并在几秒钟或几分钟后正常进行?

更新 : COM 端口是真正的端口。

更新 2 : 关于在 WinLIRC之前打开串口的其他应用程序.我做了以下事情:我把 Process Explorer到启动文件夹,以便它也开始登录,然后重新启动。进程浏览器启动后,我运行“查找句柄或 Dll”对话框,将“Serial0”放入输入并点击“搜索”。那时 WinLIRC 已经显示消息框说“CreateFile(COM1) failed with 5”。然后我等到进程资源管理器搜索结束,看到它什么也没找到,然后尝试重新初始化 WinLIRC 并再次失败。所以我建议不是串口被其他应用程序打开的情况。如果有人可以建议更好的方法来检查它,我很乐意重新检查。

当我在 WinLIRC 运行时在进程资源管理器中搜索“Serial0”时,它会找到 winlirc.exe过程,所以看起来是正确的搜索词。

更新 3 : 关于串行鼠标驱动程序。它没有在设备管理器中列出,所以我无法在那里禁用它,但是我找到了 this关于如何禁用的说明 sermouse服务,但没有帮助。

更新 4 : 还有一件事我忘了提。仅当我在启动 PC 后立即登录时才会发生这种情况。如果我将 Windows 留在登录屏幕上几分钟并稍后登录,则 WinLIRC 初始化时总是没有任何问题。

更新5 : 不幸的是,我无法访问出现此问题的计算机,因此无法再进行实验。

最佳答案

初始化端口需要时间。
您的应用程序将在 Windows XP 上运行得非常好。
Windows7 的串口是虚拟的。

你可以运行一个小代码并检查出来
使用 System.IO.Ports;

    private void Form1_Load(object sender, EventArgs e)
{

string[] ports = System.IO.Ports.SerialPort.GetPortNames();
comboBox1.Items.Add("None");
foreach (string port in ports)
comboBox1.Items.Add(port);
comboBox1.SelectedIndex = 0;

}

这将返回串行端口列表。检查它的状态并将其显示在消息框中。
制作此代码并在启动时运行。你会得到根本原因。

关于winapi - 无法从启动时启动的应用程序打开 COM1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com