我必须创建一个可执行文件(使用Borland C ++ Builder 6)代替Windows 7的批处理文件,因为权限不允许普通用户(非管理员)运行必要的批处理。我们有许多不同的Windows 7机器,一些64位和一些32,等等。我遇到的问题是“程序文件”目录被硬编码到程序中,但它并不总是正确的程序文件目录,导致某些机器出现一些错误。
我很熟悉从注册表中获取程序文件目录的方法,但我担心这不会在所有计算机上运行,因为权限设置不允许程序访问注册表。我一直在寻找像 GetWindowsDirectory 这样的函数的高低,但无济于事。有没有人有什么建议?
编辑: 我已经在Windows XP机器上对其进行了编程,只需将其置于Win7上(无法改变或避免使用XP / 7的东西,这可能是糟糕的)。这是一个简单的实用程序,无需安装;它只是放在一个文件中。它只需要出去找到程序文件目录来执行一些任务。
答案 0 :(得分:1)
首先是部署问题。您必须在64位计算机上将程序复制/安装到c:\program files (x86)
。您只需在代码中使用c:\ program files,Windows就会将其重定向到(x86)目录。
试图绕过UAC没有其他方法可以治愈。您必须在可执行文件中嵌入清单以请求管理员权限。用户获得UAC提示,让她知道您将破解私有部分。如何使用这样一个旧工具对我来说并不明显,你可能不得不将它嵌入.rc文件中。或者使用.manifest文件。
答案 1 :(得分:0)
答案 2 :(得分:0)
将SHGetFolderPath
与CSIDL_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的帮助。