我有一个旧的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,但它没有回答我的问题。
谢谢,
伊利亚·
答案 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)
看起来在安装程序中设置此文件夹的权限就足够了,现在它可以正常工作。
感谢大家的回答!