关于设置程序自启

be_quiet_endeavor 2018-08-07 01:44:29
我用Qt写了一个小程序,每天开机就会自动弹出一个不同的图片,并且带两句的话,双击能正确运行,但是设置开机自启或者定时启动都会出现启动失败的错误。

求高手指教!
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不用Qt,只是printf输出一句话,看看还正常不。
be_quiet_endeavor 2018-08-08
  • 打赏
  • 举报
回复
谢谢大家,我把程序中关于加载图片的部分注释掉,发现问题就不再出现了,然后我把图片路径改成绝对路径,和exe程序放在不同文件夹,再用静态编译,然后设置开机自启,问题就没有了,有时间我再仔细排查一下吧,现在问题能解决就行,谢谢大家了!
_肆 2018-08-08
  • 打赏
  • 举报
回复
拖到开始->启动文件夹里,不是最简单的开机自启吗
sghcpt 2018-08-08
  • 打赏
  • 举报
回复
楼主,我刚刚在我本地系统,win7,64位的系统下,在注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run下添加了系统启动后启动QT程序项目。我测试的程序有如下文件,helloword.exe,Qt5Core.dll,Qt5Widgets.dll,libgcc_s_dw2-1.dll,libstdc++-6.dll,libwinpthread-1.dll这个六个文件,在本机上测试了几次,都没有出现你说的崩溃情况出现。那估计是你的程序在某些地方的代码没有处理好导致的崩溃出现了。你可以弄个很简单的QT程序在你本机上测试一下,看看是否存在一样的错误。又或者你可以拿到你的程序到别的电脑上试试,是不是还是出现一样的崩溃情况。如果在别的电脑上都出现一样的问题,就需要自己写日志或者生产dump文件,自己排查了。。。
be_quiet_endeavor 2018-08-07
  • 打赏
  • 举报
回复
现在我的程序不带开机自启的功能,我双击是能够正确运行的,但是我用修改注册表让它开机自启,就会弹出上面那个错误提示,不管是动态编译还是静态编译都不行,不知道如何解决,有人遇到过这种问题吗?求指教!
be_quiet_endeavor 2018-08-07
  • 打赏
  • 举报
回复
引用 2 楼 yangyangsnr 的回复:
是不是路径问题,代码使用的是相对路径,设置开机启动时,工作路径下找不到文件。

不是路径的问题,我也试过不用代码设置开机自启,直接修改注册表,还是不行。
孤雲独去闲 2018-08-07
  • 打赏
  • 举报
回复
是不是路径问题,代码使用的是相对路径,设置开机启动时,工作路径下找不到文件。
赵4老师 2018-08-07
  • 打赏
  • 举报
回复
加写日志调试。
有时不将“调用函数名字+各参数值,进入函数后各参数值,中间变量值,退出函数前准备返回的值,返回函数到调用处后函数名字+各参数值+返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的,包括捕获各种异常、写日志到屏幕、单步或设断点或生成core或dmp文件、……这些方法都不行! 写日志到文件参考下面:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _MSC_VER
#pragma warning(disable:4996)
#include <windows.h>
#include <io.h>
#else
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
#define CRITICAL_SECTION pthread_mutex_t
#define _vsnprintf vsnprintf
#endif
//Log{
#define MAXLOGSIZE 20000000
#define MAXLINSIZE 16000
#include <time.h>
#include <sys/timeb.h>
#include <stdarg.h>
char logfilename1[]="MyLog1.log";
char logfilename2[]="MyLog2.log";
static char logstr[MAXLINSIZE+1];
char datestr[16];
char timestr[16];
char mss[4];
CRITICAL_SECTION cs_log;
FILE *flog;
#ifdef _MSC_VER
void Lock(CRITICAL_SECTION *l) {
EnterCriticalSection(l);
}
void Unlock(CRITICAL_SECTION *l) {
LeaveCriticalSection(l);
}
#else
void Lock(CRITICAL_SECTION *l) {
pthread_mutex_lock(l);
}
void Unlock(CRITICAL_SECTION *l) {
pthread_mutex_unlock(l);
}
#endif
void LogV(const char *pszFmt,va_list argp) {
struct tm *now;
struct timeb tb;

if (NULL==pszFmt||0==pszFmt[0]) return;
_vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
ftime(&tb);
now=localtime(&tb.time);
sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
sprintf(timestr,"%02d:%02d:%02d",now->tm_hour ,now->tm_min ,now->tm_sec );
sprintf(mss,"%03d",tb.millitm);
printf("%s %s.%s %s",datestr,timestr,mss,logstr);
flog=fopen(logfilename1,"a");
if (NULL!=flog) {
fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);
if (ftell(flog)>MAXLOGSIZE) {
fclose(flog);
if (rename(logfilename1,logfilename2)) {
remove(logfilename2);
rename(logfilename1,logfilename2);
}
} else {
fclose(flog);
}
}
}
void Log(const char *pszFmt,...) {
va_list argp;

Lock(&cs_log);
va_start(argp,pszFmt);
LogV(pszFmt,argp);
va_end(argp);
Unlock(&cs_log);
}
//Log}
int main(int argc,char * argv[]) {
int i;
#ifdef _MSC_VER
InitializeCriticalSection(&cs_log);
#else
pthread_mutex_init(&cs_log,NULL);
#endif
for (i=0;i<10000;i++) {
Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);
}
#ifdef _MSC_VER
DeleteCriticalSection(&cs_log);
#else
pthread_mutex_destroy(&cs_log);
#endif
return 0;
}
//1-79行添加到你带main的.c或.cpp的那个文件的最前面
//81-86行添加到你的main函数开头
//90-94行添加到你的main函数结束前
//在要写LOG的地方仿照第88行的写法写LOG到文件MyLog1.log中

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧