我想将portable executable
文件作为单个exe
文件提供。
此 exe 文件需要一些txt
文件来保存logs
。但我不希望用户无意中删除它。
在administrative
操作系统上不需要Windows
权限的情况下,可执行文件保存此类文件的标准方法在哪里?
便携式可执行文件也可以在不需要管理权限的情况下运行。
还建议通过便携式可执行文件写入用户系统吗?反病毒软件可以抱怨吗?
答案 0 :(得分:2)
对于32位程序,可执行文件应安装在"C:\Program Files"
或"C:\Program Files (x86)"
中。此安装需要管理员访问权限。
或者您可以在没有管理员权限的情况下安装到"c:\Users\UserName\AppData\Local"
目录(或任何其他未受保护的目录,例如"c:\My Programs"
),但这是非常规的。
日志文件和其他可写文件无法转到受保护的ProgramFiles目录。它们应该在"c:\Users\UserName\AppData\Local"
。
用户文件必须位于Documents目录中。
不要忘记程序必须允许用户卸载它。将卸载信息添加到注册表项。
"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);
}