保存可移植可执行文件的位置
Save Location for Portable Executable
我想将我的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);
}
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 编译的C可执行文件被Windows defender检测为病毒
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 是否可以在命令行中将输入参数传递给可执行文件
- 在动态加载的位置无关的可执行文件中分离错误
- 如何在函数居住的可执行文件中找到位置
- 保存可移植可执行文件的位置
- 如何在OS X中查找可执行文件在C中的位置
- 用静态链接库在64位机器上编译位置无关的可执行文件