保存可移植可执行文件的位置

Save Location for Portable Executable

本文关键字:位置 可执行文件 可移植 保存      更新时间:2023-10-16

我想将我的portable executable文件作为单个exe文件提供。

这个exe文件需要一些txt文件来保存logs。但我不希望用户无意中删除它。

通过可执行文件保存此类文件而无需Windows操作系统上的administrative权限的标准方法在哪里?

可移植可执行文件也可以在不需要管理权限的情况下运行。

还建议通过便携式可执行文件写入用户系统?防病毒软件可以抱怨吗?

对于 32 位程序,可执行文件应安装在 "C:Program Files""C:Program Files (x86)" 中。此安装需要管理员访问权限。

或者,您可以在没有管理员权限的情况下安装到"c:UsersUserNameAppDataLocal"目录(或任何其他不受保护的目录,例如 "c:My Programs"),但这是非常规的。

日志文件和其他可写文件不能转到受保护的程序文件目录。他们应该在"c:UsersUserNameAppDataLocal".

用户文件必须位于文档目录中。

不要忘记程序必须允许用户卸载它。将卸载信息添加到注册表项。

"c:\Program Files\MyCompany\MyAppName\app.exe"
"c:\Users\UserName\AppData\Local\MyCompany\MyAppName\app.exe"
HKEY_LOCAL_MACHINE //or use HKEY_CURRENT_USER if there is no admin access
    "software\microsoft\windows\currentversion\uninstall\My App Name"
        "UninstallString = full-path-uninstall-command"

卸载字符串通常会添加到HKEY_LOCAL_MACHINE ,但如果安装程序没有管理员访问权限,则可以转到HKEY_CURRENT_USER

要在 Vista 或更高版本中获取这些文件夹,请使用:

std::wstring documents, appData, programFiles;
wchar_t *ptr;
if (S_OK == SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &ptr))
{
    documents = ptr;
    CoTaskMemFree(ptr);
}
if (S_OK == SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &ptr))
{
    appData = ptr;
    CoTaskMemFree(ptr);
}
if (S_OK == SHGetKnownFolderPath(FOLDERID_ProgramFilesX86, 0, NULL, &ptr))
{
    programFiles = ptr;
    CoTaskMemFree(ptr);
}