C++ MS windows中的应用程序路径位置

C++ MS windows中的应用程序路径位置,c++,windows,path,C++,Windows,Path,我应该在哪里存储应用程序安装文件夹,以便将应用程序发送到reffer 我相信您需要的是函数,您可以像这样使用它: // get the full path to the current executable wchar_t fullPath[MAX_PATH]; GetModuleFileName(NULL, fullPath, MAX_PATH); // cut the string at the last slash, because we just want the directory

我应该在哪里存储应用程序安装文件夹,以便将应用程序发送到reffer

我相信您需要的是函数,您可以像这样使用它:

// get the full path to the current executable
wchar_t fullPath[MAX_PATH];
GetModuleFileName(NULL, fullPath, MAX_PATH);

// cut the string at the last slash, because we just want the directory
// not the actual executeable file name. 
TCHAR *lastSlash = wcsrchr(fullPath, L'\\');
lastSlash = 0;

// directory where the executable is location is fullPath

不管当前的工作目录如何,这都会起作用,一般来说,这就是我做所有“相对路径”工作的方式(也就是说,我从来没有实际使用相对路径,根据上面函数返回的值,它们始终是绝对路径)。

我相信你要找的是函数,你可以这样使用:

// get the full path to the current executable
wchar_t fullPath[MAX_PATH];
GetModuleFileName(NULL, fullPath, MAX_PATH);

// cut the string at the last slash, because we just want the directory
// not the actual executeable file name. 
TCHAR *lastSlash = wcsrchr(fullPath, L'\\');
lastSlash = 0;

// directory where the executable is location is fullPath

不管当前的工作目录如何,这都会起作用,一般来说,我就是这样做所有“相对路径”的(也就是说,我从来没有实际使用过相对路径,它们总是绝对路径,基于上面函数返回的值).

您可以使用注册表存储安装文件夹。

您可以使用注册表存储安装文件夹。

::GetModuleFileName(NULL,out\lpathname,in\u size)将为您提供可执行文件的完整路径

::GetModuleFileName(NULL,out\lpPathName,in\u size)将为您提供可执行文件的完整路径

ApplicationData文件夹,即使不是管理员访问也有助于访问您的安装数据。将SHGetSpecialFolderPath与CISDLCSIDL_APPDATA

ApplicationData文件夹一起使用,即使管理员访问也可以帮助您访问安装数据。将SHGetSpecialFolderPath与注册表中的CISDLCSIDL\u APPDATA一起使用。具体来说,如果您为所有用户安装了应用程序(即在程序文件中),请在
HKEY\U LOCAL\U MACHINE\SOFTWARE\YourCompanyName\YourApplicationName\
下;如果您仅为单个用户安装,请在
HKEY\U CURRENT\U USER\SOFTWARE\YourCompanyName\YourApplicationName\
下。具体而言,如果您为所有用户安装了应用程序(即在\程序文件中),请在
HKEY\U LOCAL\U MACHINE\SOFTWARE\YourCompanyName\YourApplicationName\
下,如果您仅为单个用户安装,请在
HKEY\U CURRENT\U USER\SOFTWARE\YourCompanyName\YourApplicationName\
下进行操作。

您的应用程序隐式知道从何处启动。只需使用相对路径访问您的应用程序资源,您的用户就可以进行多个安装,而不会相互干扰。您好,Anon,假设应用程序不是从其安装文件夹启动的,也不是由另一个不知道如何与我的应用程序通信的应用程序启动的。在这个框架中,GetCurrentDirectory()调用为我提供启动应用程序的路径,而不是我的应用程序。那样的话我该怎么办?谢谢,您的应用程序隐式地知道从何处启动。只需使用相对路径访问您的应用程序资源,您的用户就可以进行多个安装,而不会相互干扰。您好,Anon,假设应用程序不是从其安装文件夹启动的,也不是由另一个不知道如何与我的应用程序通信的应用程序启动的。在这个框架中,GetCurrentDirectory()调用为我提供启动应用程序的路径,而不是我的应用程序。那样的话我该怎么办?谢谢,请注意,这是您启动的地方,而不是安装应用程序的地方。使用Unicode函数时,它们当然应该是相同的…+1。但是它必须是
*lastSlash=0
,您应该测试对斜杠的搜索是否成功。还可以考虑使用<代码> WScord对象而不是C数组。注意,这是您从哪里启动的,而不是您的应用程序安装到哪里。使用Unicode函数时,它们当然应该是相同的…+1。但是它必须是
*lastSlash=0
,您应该测试对斜杠的搜索是否成功。还可以考虑使用<代码> WStudio对象而不是C数组。