gpt4 book ai didi

c++ - 为什么我的代码在 Windows 7 下无法在 "C:\Program Files"中创建目录?

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:15 28 4
gpt4 key购买 nike

我使用的是 Windows 7,我必须在该 Windows 中运行一个程序,但该程序在 Windows XP 中运行。这是一个 Visual C++ 程序,我为此使用 Visual Studio 2008。当我运行我的应用程序时,它没有抛出任何错误,但它没有在“c:\program files\”中创建目录。那么谁能帮我创建目录和exe文件?

这是我使用的代码:

char szAppPath[MAX_PATH];
char szFileName[MAX_PATH];
DWORD dwResult;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;

dwResult = ExpandEnvironmentStrings( NULL, szAppPath, MAX_PATH); // "%ProgramFiles%"


// do same for NSim directory
strcat(szAppPath,"\\NSim");
hFind = FindFirstFile(szAppPath, &FindFileData);

if (hFind == INVALID_HANDLE_VALUE)
{
//Directory Does't Exists create New
if(!CreateDirectory(szAppPath,NULL)) //Throw Error
{
MessageBox("Unable to Create N-SIM directory","NSim Installer");
return ;
}
}
else
{
//check if is directory or not
if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
MessageBox("Can't Create N-SIM directory\n Another file with same name exists","NSim Installer");
return ;
}

FindClose(hFind);
}

//***************************************N-SIM Application****************************
strcpy(szFileName, szAppPath);
HRSRC hRes;

if( bRegister == FALSE)
{
strcat(szFileName,"\\NSim.exe"); //make same name of the Client & Server in program file
hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_LANSIMSERVER),RT_RCDATA);

if(flagUpgrade ==0)
{
CString trial = installationDate(); //----- Detemine Expiry Date -----

setRegistry(trial);
}
}

最佳答案

这是一个文件权限问题,简单明了。程序不能只在 Windows 7 中围绕系统目录进行 root 操作。这就是它在 Windows XP 中“正常”运行但在较新版本中运行不正常的原因.

我不能确定,但​​看起来你正在尝试编写安装程序。如果是这样,你为什么要重新发明轮子?有大量可用的优秀设置实用程序——Visual Studio 提供了一个设置项目,您可以根据自己的需要进行自定义,或者查看 Inno Setup ,我个人的最爱。谷歌搜索会出现许多其他选项,这些选项已经为您和无数其他人解决了这个问题。

如果这不是安装程序,而您只是想将应用程序和/或用户数据存储在 Program Files 文件夹中,我强烈建议您查看其他地方。在早期版本的 Windows 下,您不应该将数据推送到应用程序文件夹中,如果您这样做,Windows 7 只会让您屈服。最好的办法是遵循从一开始就存在的建议:仔细调查用户和公共(public)应用程序数据文件夹。使用 SHGetKnownFolderPath function使用其 KNOWNFOLDERID 检索已知文件夹的完整路径.一些建议:

  • FOLDERID_ProgramData(所有用户的共享程序数据目录)
  • FOLDERID_LocalAppData(每个用户的程序数据目录,非漫游)
  • FOLDERID_RoamingAppData(每个用户的程序数据目录,漫游)

或者,您可以尝试以管理员身份运行该应用程序。你可能想看看 creating a manifest这表示应用程序需要管理员级别的权限才能执行。

关于c++ - 为什么我的代码在 Windows 7 下无法在 "C:\Program Files"中创建目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4583200/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com