2011-01-05 69 views
0

我有一个旧的C++应用程序需要修改才能使用windows 7. 问题在于创建一个新文件夹并保存一个文件在该文件夹中。此文件夹应创建于在windows 7中创建一个文件夹和文件在c: program files myApp data中

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不会。如果我以管理员身份运行应用程序而不是创建文件夹,否则会抛出“访问被拒绝”错误。

我的问题是以下几点:
是否有更改代码,以便该文件夹可在“程序文件”创建一个选项NAD的文件可以保存此文件夹中?

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

感谢,
伊利亚·

+0

我认为你应该尝试这样的MSDOS命令,如md文件夹的路径和这些命令是由您的应用程序 – Badr 2011-01-05 09:59:57

+0

运行您可以请更具体或给我一个代码示例?我不是很熟悉C++ ...谢谢! – 2011-01-05 10:02:35

回答

0

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

感谢大家的回答!

3

你已经回答了你自己的问题。你需要在Program Files下写在Windows管理员7

应用数据都会在不同的区域下的用户//应用程序数据等..

您可以随时使用注册表来选择位置写,所以你可以使用XP上的旧区域以及Vista和Windows 7上的新区域。

3

在Vista和更高版本下用户访问受限,您不想尝试将文件放入“Program Files”或任何其他非标准的地方。您应该真的使用SHGetFolderPath从系统获取正确的位置。

+0

请参阅http://stackoverflow.com/questions/1615444/windows-standard-file-locations/1615619#1615619以供API使用。 (它们在XP和Vista/Win7上有所不同) – Macke 2011-01-05 10:21:27

1

由于@CashCow写道:

你需要在Program Files管理员 写在Windows 7

这样做是为了提升自己的过程

最佳方式(使用ShellExecute "runas"或类似),然后创建文件夹。

一些ShellExecute例子:

+0

如果您需要在系统区创建一个文件夹,您应该在安装程序中使用管理员权限运行。 – 2011-01-05 10:15:53

+0

是否有使用ShellExecute的一些很好的例子,因为我不是很熟悉C++ – 2011-01-05 10:25:20

3

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

作为替代方案存在一个快速和肮脏的修复(!):如果应用程序有一个清单,用户帐户控制数据重定向踢,透明地重定向写请求的系统区域在一个安全的地方用户资料。重定向目标是%LocalAppData%\ VirtualStore \ Program Files。有关这种内置虚拟化的详细信息,请参阅here

所以你可以通过简单地从应用程序中删除清单来完成。

相关问题