从虚拟化文件夹 UAC 获取配置文件
Get config file from virtualized folder UAC
我继承了一个遗留应用程序,该应用程序过去常常将其设置写入 C:\Program Files\<Company>\<ProgramName>
下的文件。
此应用程序早于 Windows Vista,因此不包含清单。因此,当安装在 Windows Vista 或更高版本上时,这些写入实际上会被重定向(虚拟化),并且设置文件最终会在其他地方——通常在 C:\Users\<username>AppData\Local\VirtualStore\Program Files(x86)\...
中(但如果我是正确的,这取决于在 Windows 版本上)。
现在我需要更新这个遗留应用程序,并将包含一个清单。设置文件现在需要存储在其他地方,可能在 %APPDATA% 中。问题是,当 'updated' 版本安装在旧版本之上时,如果它能以某种方式找到以前的设置文件并将其复制到新位置,那就太好了。
因此,问题是:有没有什么方法可以通过未虚拟化的应用程序以编程方式知道Windows最终将放置虚拟化文件的位置?
这取决于旧应用程序的安装位置。用户可能已安装在 "c:\program files\..."
或 "c:\program files (x86)\"
或其他地方。
您必须找到旧的安装路径并删除盘符。例如:"c:\Program Files\Company\Old App"
变为 "Program Files\Company\Old App"
接下来,附加到 VirtualStore
路径。
例如:
wchar_t *old_application_path = L"Program Files\Company\Old App Folder";
wchar_t path[300];
wchar_t *ptr;
if (S_OK == SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &ptr))
{
wsprintf(path, L"%s\VirtualStore\%s", ptr, old_application_path);
CoTaskMemFree(ptr);
}
请注意,此虚拟化仅适用于受保护的文件夹,例如 "c:\Program Files"
需要管理员权限才能写入数据。如果程序安装到不受保护的文件夹,例如 "c:\my programs\"
,则没有虚拟化,程序可以直接写入该文件夹。
我继承了一个遗留应用程序,该应用程序过去常常将其设置写入 C:\Program Files\<Company>\<ProgramName>
下的文件。
此应用程序早于 Windows Vista,因此不包含清单。因此,当安装在 Windows Vista 或更高版本上时,这些写入实际上会被重定向(虚拟化),并且设置文件最终会在其他地方——通常在 C:\Users\<username>AppData\Local\VirtualStore\Program Files(x86)\...
中(但如果我是正确的,这取决于在 Windows 版本上)。
现在我需要更新这个遗留应用程序,并将包含一个清单。设置文件现在需要存储在其他地方,可能在 %APPDATA% 中。问题是,当 'updated' 版本安装在旧版本之上时,如果它能以某种方式找到以前的设置文件并将其复制到新位置,那就太好了。
因此,问题是:有没有什么方法可以通过未虚拟化的应用程序以编程方式知道Windows最终将放置虚拟化文件的位置?
这取决于旧应用程序的安装位置。用户可能已安装在 "c:\program files\..."
或 "c:\program files (x86)\"
或其他地方。
您必须找到旧的安装路径并删除盘符。例如:"c:\Program Files\Company\Old App"
变为 "Program Files\Company\Old App"
接下来,附加到 VirtualStore
路径。
例如:
wchar_t *old_application_path = L"Program Files\Company\Old App Folder";
wchar_t path[300];
wchar_t *ptr;
if (S_OK == SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &ptr))
{
wsprintf(path, L"%s\VirtualStore\%s", ptr, old_application_path);
CoTaskMemFree(ptr);
}
请注意,此虚拟化仅适用于受保护的文件夹,例如 "c:\Program Files"
需要管理员权限才能写入数据。如果程序安装到不受保护的文件夹,例如 "c:\my programs\"
,则没有虚拟化,程序可以直接写入该文件夹。