从Borland C ++ 6中的Windows获取程序文件目录

时间:2011-03-28 15:37:50

标签: c++ c++builder c++builder-6 borland-c++

我必须创建一个可执行文件(使用Borland C ++ Builder 6)代替Windows 7的批处理文件,因为权限不允许普通用户(非管理员)运行必要的批处理。我们有许多不同的Windows 7机器,一些64位和一些32,等等。我遇到的问题是“程序文件”目录被硬编码到程序中,但它并不总是正确的程序文件目录,导致某些机器出现一些错误。

我很熟悉从注册表中获取程序文件目录的方法,但我担心这不会在所有计算机上运行,​​因为权限设置不允许程序访问注册表。我一直在寻找像 GetWindowsDirectory 这样的函数的高低,但无济于事。有没有人有什么建议?

编辑: 我已经在Windows XP机器上对其进行了编程,只需将其置于Win7上(无法改变或避免使用XP / 7的东西,这可能是糟糕的)。这是一个简单的实用程序,无需安装;它只是放在一个文件中。它只需要出去找到程序文件目录来执行一些任务。

5 个答案:

答案 0 :(得分:1)

首先是部署问题。您必须在64位计算机上将程序复制/安装到c:\program files (x86)。您只需在代码中使用c:\​​ program files,Windows就会将其重定向到(x86)目录。

试图绕过UAC没有其他方法可以治愈。您必须在可执行文件中嵌入清单以请求管理员权限。用户获得UAC提示,让她知道您将破解私有部分。如何使用这样一个旧工具对我来说并不明显,你可能不得不将它嵌入.rc文件中。或者使用.manifest文件。

答案 1 :(得分:0)

答案 2 :(得分:0)

SHGetFolderPathCSIDL_PROGRAM_FILES一起使用。

如果您始终在Windows Vista或更高版本上,则会有一个名为SHGetKnownFolderPath的较新版本,但您可能需要更新Platform SDK。如果您仍在使用Borland C ++ 6,我怀疑您的Platform SDK可能更旧。在这种情况下,您应该能够使用SHGetFolderPath

答案 3 :(得分:0)

安装软件后,请转到:

C:\Program Files\Borland\CBuilder6\Bin

右键单击bcb.exe文件,选择

  

属性 - >兼容性

选择选项 - Run this program mode Windows XP(Service Pack 3)Privilege Level

然后,选择选项Run as administrator,然后单击“应用”。

这适用于我的问题。

答案 4 :(得分:-2)

在Windows 7 x64上,只需在“c:\ Program Files”中创建一个连接点,指向安装在“c:\ Program Files(x86)”中的实际文件夹。这应该由安装软件的同一用户完成。这不仅应该解决您的问题,还应该考虑在Win 7 x64上无法使用的第三方软件包。

如果您不知道联结点是什么,请阅读mklink的帮助。