【发布时间】:2015-11-19 15:38:04
【问题描述】:
我在 Visual Studio 2015 中创建了一个 C++ Win32 应用程序。我的目标是让它在启动时运行。我在注册表中添加了一个新条目(HKCU\Software\Microsoft\Windows\CurrentVersion\Run)。由于未知原因,它不起作用。
但是,它在“启动”选项卡的任务管理器中正确显示,但在“进程”选项卡中却没有显示,这意味着它根本没有运行。我试图将它包装在一个bat文件中。 bat 运行,但应用程序似乎在启动时失败(或完全忽略,我无法准确判断)。如果我从 Program Files 目录手动启动,它会正常运行。
这是一个朋友的旧 Visual 项目,它是在当前 Visual (2015) 中转换的。如果我从头开始创建一个新项目,它就可以工作。但这种行为是没有理由的。
最后的想法 - 我成功解决了我的问题。我的程序无法找到 SQLite 文件,因为 Windows 在启动时启动的任何程序都使用“c:\Windows\System32”作为当前目录。我刚刚应用了 Marko Popovic 的解决方案。这只是一个简单的当前目录问题。
PS - Marko Popovic 的解决方案很好,但@IInspectable 警告此方法可能出现的传入错误。他建议只使用完全限定的路径名而不更改目录。
【问题讨论】:
-
问题大概是“如何诊断故障模式?”
-
它是否可能与它的启动目录有关,可能是从当前目录加载 DLL 并且该目录不在路径中?会不会是在读取尚未设置的环境变量?
-
@Matt:这往往会导致更大的故障。但这并非完全不可能。
-
你说你从一个批处理文件开始。如果您打开 cmd.exe 控制台,cd 到 c:\ (
cd /d c:\) 并从那里启动带有完整路径的批处理文件,它会启动吗?如果您进入系统目录 (cd /d c:\Windows),同样的问题? -
我从批处理文件中运行以进行测试。它既不能与 bat 一起使用,也不能直接使用。
标签: c++ winapi visual-studio-2015