0

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

我熟悉从注册表获取程序文件目录的方法,但我担心这不适用于所有机器,因为权限设置不允许程序访问注册表。我一直在寻找像GetWindowsDirectory这样的功能,但无济于事。有没有人有什么建议?

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

4

5 回答 5

1

这首先是一个部署问题。您必须将程序复制/安装到c:\program files (x86)64 位机器上。您可以简单地在代码中使用 c:\program 文件,Windows 会将其重定向到 (x86) 目录。

否则,试图绕过 UAC 没有简单的解决方法。您必须在可执行文件中嵌入清单以请求管理员权限。用户收到 UAC 提示,让她知道您将要破解私有部分。如何用这么旧的工具做到这一点对我来说并不明显,你可能必须将它嵌入到 .rc 文件中。或者使用 .manifest 文件。

于 2011-03-28T15:47:47.290 回答
0

SHGetFolderPath与 一起使用CSIDL_PROGRAM_FILES

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

于 2011-03-28T17:39:35.347 回答
0

安装软件后,转到:

C:\Program Files\Borland\CBuilder6\Bin

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

属性 -> 兼容性

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

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

这适用于我的问题。

于 2012-03-10T00:09:42.960 回答
-2

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

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

于 2011-03-28T16:44:41.187 回答