GetModuleFileName 在win11下,桌面快捷方式启动,获取路径还是在桌面。怎么解决?

原来的在win7下,GetModuleFileName可以获取程序的安装路径,现在安装到win11下,直接获取了桌面路径,导致原来要生成的数据库放到了桌面,程序找不到数据库启动不起来了。
GetModuleFileName win11 路径获取问题
在win11下,桌面快捷方式启动,获取路径还是在桌面。
不知道如何解决,因为还需要兼容WIN7
请指导下

还是不行,老样子。我得从win11的programmes下面把文件复制出来,放到桌面上,建个文件夹,然后无论是在文件夹内运行或是发个快捷方式到桌面,都能正常运行了。难道是我根据获取的路径创建数据库的方式有问题。我把获取的路径转换为unicode,然后再该路径下自动生成数据库。

char* CDataBase::AnsiToUtf8(char* str)
{
WCHAR* strA;
int i= MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
strA = new WCHAR[i];
MultiByteToWideChar(CP_ACP,0,str,-1,strA,i);

i=   WideCharToMultiByte(CP_UTF8,0,strA,-1,NULL,0,NULL,NULL);    
char   *strB=new   char[i];    
WideCharToMultiByte(CP_UTF8,0,strA,-1,strB,i,NULL,NULL);    
//strB即为所求    
return   strB;

}

贴出代码。我这边测试win11无异常。

img

Win11桌面路径中是不是有中文的?工程项目字符集用的是UNICODE吗?
如果用的是多字节字符集,设置成unicode的,用下边代码获取路径

TCHAR szExe[MAX_PATH]; 
memset(szExe, 0, sizeof(TCHAR)*MAX_PATH);
GetModuleFileName(NULL, szExe, MAX_PATH);