在Windows 7中的c:\ program files \ myApp \ data中创建一个文件夹和文件

时间:2011-01-05 09:49:27

标签: c++ windows-7 directory program-files

我有一个旧的c ++应用程序,需要修改才能使用Windows 7。 问题在于创建新文件夹并将文件保存在该文件夹中。该文件夹应在

中创建
  

c:\ program files \ myApp \ data \ newFolder。

这是我用来创建新文件夹并获取错误的功能:

if(!CreateDirectory(pathSamples,NULL))  //Throw Error
 {
  DWORD errorcode = GetLastError(); 
  LPVOID lpMsgBuf;

  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
       NULL, errorcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );

  MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK);
 }

在XP中可行,但在Windows 7中却没有。如果我以管理员身份运行应用程序而不是创建文件夹,否则将抛出“访问被拒绝”错误。

我的问题如下:
是否可以选择更改代码,以便可以在“程序文件”中创建文件夹,并且文件可以保存在此文件夹中?

PS我已经看到了this thread,但它没有回答我的问题。

谢谢,
伊利亚·

5 个答案:

答案 0 :(得分:3)

您已回答了自己的问题。您需要成为管理员才能在Windows 7中的Program Files下编写。

应用程序数据位于Users // AppData等下的不同区域......

您始终可以使用注册表选择要写入的位置,这样您就可以使用XP上的旧区域和Vista和Windows 7上的新区域。

答案 1 :(得分:3)

在Vista下用户访问受限,以后您不希望尝试将文件放入“程序文件”或任何其他非标准位置。您应该使用SHGetFolderPath从系统中获取正确的位置。

答案 2 :(得分:3)

正如其他人已经写过的那样,%ProgramFiles%不是存储用户数据的正确位置。显然,正确的解决方案是重新设计应用程序,以便它使用不同的存储位置。

作为替代方案,存在快速且脏的(!)修复:如果应用程序具有清单,则用户帐户控制数据重定向启动,透明地将写入请求重定向到系统区域用户个人资料中的安全位置。重定向目标是%LocalAppData%\ VirtualStore \ Program Files。有关此类内置虚拟化的详细信息,请参见here

因此,只需从应用程序中删除清单即可完成。

答案 3 :(得分:1)

正如@CashCow所写:

  

您需要成为管理员   在Windows下的Program Files下编写   7。

最好的方法是升级您的流程(使用ShellExecute "runas"或类似方法),然后创建文件夹。

一些ShellExecute示例:

答案 4 :(得分:0)

看起来在安装程序中设置此文件夹的权限就足够了,现在它可以正常工作。

感谢大家的回答!