2

我使用GetModuleFileName获取应用程序的绝对路径,使用RegOpenKeyExRunOnce打开注册表项并使用RegSetValueEx设置值。

if (RegOpenKeyEx (HKEY_CURRENT_USER, 
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce",0, KEY_SET_VALUE, &hk1) == ERROR_SUCCESS) 

{ 
    RegSetValueEx(hk1, // subkey handle 
                  "", // value name 
                  0, // must be zero 
                  REG_SZ, // value type 
                  (LPBYTE) &path, sizeof(DWORD)); // length of value data    
    RegCloseKey(hk1); 
} 

但是,我的应用程序在系统重新启动后没有启动。

4

4 回答 4

3

有几种方法:

  • 将您的应用程序放在您的启动文件夹中。这是一个非常简单的方法。当您的系统(PC)将重新启动时,应用程序将启动(您需要为此登录);
  • 使用windows任务计划器;
  • 使应用程序成为服务

如果它总是需要运行,我更喜欢最后一个选项。但是您需要添加服务处理

于 2012-12-28T09:45:11.303 回答
1

您可以使用任务计划程序创建任务以在计算机启动时运行您的应用程序。

  1. 打开任务计划程序,方法是单击开始按钮 、控制面板、系统和安全、单击管理工具,然后双击任务计划程序。如果系统提示您输入管理员密码或确认,请键入密码或提供确认。

  2. 单击操作菜单,然后单击创建基本任务。

  3. 键入任务的名称和可选描述,然后单击下一步。

  4. 单击计算机启动时,然后单击下一步。

  5. 要安排程序自动启动,请单击启动程序,然后单击下一步。

  6. 单击浏览以查找要启动的程序,然后单击下一步。

  7. 选择单击完成时打开此任务的属性对话框复选框并单击完成。

  8. 在“属性”对话框中,选择“无论用户是否登录都运行”,然后单击“确定”

资源:

Windows 7 - 安排任务

PS:您必须以管理员身份登录才能执行这些步骤

于 2012-12-28T09:43:18.637 回答
0

使用您选择的解决方案时,需要牢记以下几点:

  • 应用程序不会在系统启动时启动,而是在当前用户登录时启动。
  • 如果您写入RunOnce密钥,则该操作将仅执行一次。如果您希望您的应用程序始终在用户登录时启动,您应该使用Run密钥。

除了上述之外,如果你想创建一个值,你必须给它一个名字。从RegSetValueExlpValueName参数的文档中:

如果lpValueNameisNULL或空字符串, "",该函数设置键的未命名或默认值的类型和数据。

默认(未命名)值是(Default)使用 regedit 时显示的值。要使其正常工作,您必须为该值提供一个名称。这应该是唯一的,这样它就不会与该键下的其他值冲突。

在技​​术含量较低的情况下,仅应在彻底考虑后才能为应用程序实现自动启动功能。

于 2012-12-28T14:18:42.463 回答
0

您将错误的参数值传递给RegSetValueEx(). 您需要像这样使用它:

TCHAR path[MAX_PATH+1] = {0}
GetModuleFileName(NULL, path, MAX_PATH);

if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce"), 0, KEY_SET_VALUE, &hk1) == ERROR_SUCCESS) 
{ 
    RegSetValueEx(hk1, // subkey handle 
                  TEXT("MyApp"), // value name 
                  0, // must be zero 
                  REG_SZ, // value type 
                  (LPBYTE) path,
                  (lstrlen(path)+1) * sizeof(TCHAR)); // length of value data, in bytes
    RegCloseKey(hk1); 
} 
于 2012-12-28T22:01:46.370 回答