VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 503|回复: 2

[求助] 自己写的一个自启程序为什么,在运行的时候会出错,求大神帮忙

[复制链接]
66_avatar_middle
在线会员 ly1599285982 发表于 2018-4-23 16:00:46 | 显示全部楼层 |阅读模式
3驿站币
自己想用Win32程序写一个自启程序,但运行的时候系统报错,求大神帮忙
代码如下:

--------------------------------------Win32.cpp-----------------------------------
  1. #include<stdio.h>
  2. #include<windows.h>
  3. #include<stdlib.h>
  4. #include"获取文件路径.h"
  5. #include"启动函数.h"
  6. int main(int argc, char*argv[])
  7. {
  8.         const char*str=NULL;
  9.         StartupRun("小凌自启程序", str, argv[0]);
  10.         str = ReplaceString(argv[0],"Win32.exe","Win32.exe");
  11.         /*StartupRun("小凌自启程序", str,argv[0]);*/
  12.         printf("\n设置开机启动程序路径:",str);
  13.         printf("\n\n设置成功\n\n");
  14.         system("pause");
  15.         return 0;
  16. }
复制代码

---------------------------------------------获取文件路径.h------------------------------------------
  1. #include<windows.h>
  2. #include<stdio.h>

  3. char*ReplaceString(const char*srcStr, const char*src, const char*dest)//替换文字,获取文件路径
  4. {
  5.         char*ptr;
  6.         int len = strlen(srcStr);
  7.         ptr = (char*)malloc(sizeof(char)*len + 1);
  8.         strcmp(ptr, srcStr);
  9.         for (int i = 0; i < len; ++i)
  10.         {
  11.                 if (strncmp(&ptr[i], dest, strlen(dest))==0)
  12.                 {
  13.                         strncmp(&ptr[i], dest,strlen(dest));
  14.                 }
  15.         }
  16.         ptr[len + strlen(dest) - strlen(src)] = '\0';//计算出字符串结束位置,并加上‘/0’
  17.         return ptr;
  18. }
复制代码

-----------------------------------------启动函数.h--------------------------------------
  1. #include <windows.h>
  2. #include<stdio.h>
  3. int StartupRun(const char*key, const char*path, char arv[])//key为启动名称,path为要开机的程序名称
  4. {
  5.         HKEY hKey;
  6.         DWORD dwDisposition;
  7.         LONG result = RegCreateKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\Current\\Run", NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);
  8.         //用来创建注册表键,如果改建已经存在,则打开它(注册表不区分大小写)
  9.         RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\Current\\Run", 0, KEY_SET_VALUE, &hKey);
  10.         RegSetValueEx(hKey, L"Windows硬盘优化", 0, REG_SZ, (const unsigned char*)arv[0], sizeof(arv[0]));
  11.         //新增一个值,名称随意取
  12.         if (result != ERROR_SUCCESS)
  13.         {
  14.                 RegCloseKey(hKey);
  15.                 return 0;
  16.         }
  17.         result = RegSetValueEx(hKey, (LPCWSTR)key, NULL, REG_SZ, (const unsigned char*)path, strlen(path) + 1);
  18.         if (result != ERROR_SUCCESS)
  19.         {
  20.                 RegCloseKey(hKey);
  21.                 return 0;
  22.         }
  23.         RegCloseKey(hKey);
  24.         return 1;
  25. }
复制代码


程序运行之后就报错,也不知道达到自启效果没有,求大神过来指点一下.

41.png




上一篇:数组元素类型不能是函数或抽象类类型
下一篇:release

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-4-23 16:39:09 | 显示全部楼层
一眼望去就出现了N多个错误:
1、注册表中的启动项路径应该是:SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run 吧,楼主貌似写成了 Current 了;
2、把 StartupRun 函数中的:
result = RegSetValueEx(hKey, _T("Windows硬盘优化"), 0, REG_SZ, (const unsigned char*)arv[0], _tcslen(arv) * sizeof(arv[0]));
改成:
result = RegSetValueEx(hKey, _T("Windows硬盘优化"), NULL, REG_SZ, (const BYTE*)arv, _tcslen(arv) * sizeof(arv[0]));

3、下面的:
result = RegSetValueEx(hKey, (LPCTSTR)key, NULL, REG_SZ, (const BYTE*)path, _tcslen(path));
会直接报错崩溃,因为参数 path 你传进来就是 NULL,所以直接报错了。

楼主,问题多多哦!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

14_avatar_middle
在线会员 liontxl 发表于 2018-6-14 04:25:09 | 显示全部楼层
  1. // 测试开机自启动.cpp : 定义控制台应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. #include <Windows.h>

  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7.         HKEY hKey;
  8.         LPCWSTR lpRun = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
  9.         long lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey);
  10.         if (lRet == ERROR_SUCCESS)
  11.         {
  12.                 const size_t nArrayLength = 128;
  13.                 LPWSTR pFile = new TCHAR[nArrayLength]{0};
  14.                 GetModuleFileName(NULL, pFile, nArrayLength);
  15.                 RegSetValueEx(hKey, _T("ExitWindow"), 0, REG_SZ, (BYTE*)pFile, nArrayLength);
  16.                 delete[] pFile;
  17.                 pFile = NULL;
  18.         }
  19.         RegCloseKey(hKey);
  20.         system("pause");
  21.         return 0;
  22. }

复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-10-16 21:27

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表