我有一个32位窗口旧应用程序(有C/bit 32源代码),它在可执行文件所在的文件夹中创建它的数据文件。
由于应用程序没有安装程序,而且用户可以将可执行文件放置在他/她想要的任何位置,所以应用程序有一个对话框来通知用户其数据的位置。
但是在Microsoft /7下,如果用户将应用程序放在Program或任何其他受系统保护的文件夹中,则数据文件将被虚拟化并移动到虚拟存储中。
如果在Vista/7下,我仍然想通知用户数据文件的位置:(在不阻止清单文件中的虚拟化的情况下)
我发现以下问题与我所问的非常接近,但它并没有显示出一个解决方案(如果有的话),即知道什么时候对一个文件进行虚拟化,以及它在哪里被虚拟化。
发布于 2013-07-30 19:13:18
虚拟化对应用程序是透明的。了解它是否正在虚拟化的唯一方法是根据您链接到的问题中的答案(使用带有GetTokenInformation()
标志的TokenVirtualizationEnabled
)询问操作系统,但是没有(据我所知)询问操作系统虚拟项实际存储位置的方法,因为它可能与一个操作系统版本不同。您将不得不做一些研究,然后硬编码每个给定操作系统的路径,您的应用程序在运行时检测。
如果要更新代码以检测虚拟化,那么最好更新代码,以便更好地使用UAC。停止将文件存储在不属于它们的地方,并开始将它们存储到Microsoft希望您存储的位置。在本例中,改为在用户的配置文件中。使用SHGetFolderPath()
或相关函数定位用户的CSIDL_LOCAL_APPDATA
文件夹(或在Vista+上的SHGetKnownFolderPath()
定位FOLDERID_LocalAppData
文件夹),然后为应用程序创建一个子文件夹以将其数据文件存储在其中。
https://stackoverflow.com/questions/17953426
复制相似问题