在64位版本的Windows中,32位软件安装在"c:\ program files(x86)"中.这意味着你不能使用$(programfiles)来获取(32位)软件的路径.所以我需要一个$(ProgramFiles32)来克服我的MSBuild项目.我不想根据运行的操作系统更改项目.
我有一个解决方案,我会发布,但也许有一个更容易/更好的方式.
我意识到用户改变Windows默认值的可能性C:\Program Files相当小,但是发生了奇怪的事情!
如何Program Files从系统中获取正确的路径?
我在C#/ .NET中编程.无论目标机器的架构是什么,我希望能够从目标机器返回Program Files目录.为了澄清,C (or whatever drive the OS is on):/Program Files无论他们的Windows版本有多大,我都希望它能够返回.
我只能在目录中进行硬编码,除非用户正在运行未安装在C:驱动器上的Windows,否则它将无法工作.
我发现
FileInfo(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) 
但我认为它返回Program Files (x86)64位Windows机器上的文件夹.
尝试创建将文件夹添加到程序文件中的程序 - 收到此错误:
WindowsError: [Error 5] Access is denied 'C:\\Program Files\\IMP'
这是我的代码
import os, sys, random
numb= 1
x=True
while x==True:
    newpath = ((r'C:\Program Files\IMP\folder_%s') % (numb))
    if not os.path.exists(newpath):
        os.makedirs(newpath)
    numb=numb+1
    if numb==11:
        x=False
我正在尝试将Integration Services添加到现有的SQL Server 2008实例中.
我转到SQL Server安装中心并单击"新安装或向现有安装添加功能"选项.此时,弹出一个文件系统窗口.我被要求浏览SQL Server 2008 R2安装媒体.
我尝试了C:Program Files\MicrosoftSQLServer,但收到的错误消息是它不被接受为"有效的安装文件夹".我深入了解了MicrosoftSQLServer文件夹,找到了\ SetupBootstrap,但是也没有接受.似乎唯一的办法是找到安装媒体文件夹,但我不确定它要求的是什么.
如何找到Installation Media文件夹?或者,欢迎使用其他方法将SSIS添加到现有的SQL Server 2008实例中.
谢谢.
我知道在64位Windows 32位应用程序C:\Program Files (x86)默认进入,64位进入C:\Program Files.
但是,如果你有一个更复杂的安装包,比如一个客户端组件(32位)和一个服务器组件(64位)以及可能的一些辅助工具(32位),那该怎么办呢?在这种情况下,默认安装路径应该是什么?
根据一些文章,微软和一些安装框架不鼓励混合比特:
考虑到x64平台运行x86应用程序的效果如何,以及托管代码在两种模式下运行相同的二进制文件时,我不明白为什么混合它们应该是如此大的禁忌.在我的情况下,75%的附带库在客户端和服务器之间共享,并且完全相同,因此将它们拆分是没有意义的.
那么鉴于此,这是32位和64位应用程序混合的首选安装位置?C:\Program Files (x86)还是C:\Program Files?在我看来,64位的位置是可取的.我将Program Files(x86)目录视为旧应用程序的遗留沙箱,这些应用程序从未考虑过为64位应用程序而设计.对于混合32/64位应用程序,存在64位感知,因此应该没有遗留原因将32位文件从64位文件沙箱中取出.对我来说,没有"(x86)"的路径也更具视觉吸引力并且表明它是一个现代应用程序 - 适用于64位操作(必要时).
当在同一个安装程序包中作为一个应用程序安装时,是否有人知道将32/64位混合可执行文件放入64位目录的其他原因?
在C#中,如何引用以下位置而不是硬编码?
我可以%ProgramFiles%和Ant一起进入${env.PROGRAMFILES}.但我无法弄清楚如何获得%ProgramFiles(x86)%.
在Windows 7上运行的32位应用程序将返回以下内容?
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
C:\Program Files (x86)还是C:\Program Files?
我知道这c:\Program Files是受 UAC 保护的,如果我允许用户安装到d:\Program Files,默认情况下这不受 UAC 保护。c:\Program Files除了目录安全设置之外,是什么让UAC 受到保护?是简单的目录安全性,还是 Windows 做的其他事情使它变得特别?
我想劝告别人时,如果它有可能使d:\Program Files排序为等效的安全c:\Program Files。如果我d:\Program Files使用与 相同的目录安全性创建c:\Program Files,这些文件夹是否等效?
我想在java上获取默认的Program Files文件夹.我用的时候:
 System.getenv("ProgramFiles")
它返回"C:\ Program Files"而不是"C:\ Program Files(x86)"
我可以手动添加+(x86),但如果用户将使用32位系统,它将是错误的文件夹.
我之前使用SysNative来访问64位system32目录,但我似乎无法找到Program Files目录的等价物.我觉得我错过了一些简单的东西,但如果我尝试做的事情如下:
$command = "${Env:ProgramFiles}\Company\executable.exe"
然后$command最终成为C:\ Program Files(x86)\ Company\executable.exe.
任何人都可以指出我正确的方式访问64位程序文件(从32位PowerShell)?
我正在尝试在32位Program Files文件夹中创建一个文件目录(文件夹),以存储用户将在程序中创建的数据.但是,当我尝试这样做时,它一直说访问被拒绝.反正是否允许程序访问32位程序文件文件夹并向其添加后续文件夹和文件?以下是我的代码,由于没有权限而产生运行时错误.
string mainDirectory=Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)+"\\UKC Trial Reporter Files";
if (!Directory.Exists(mainDirectory))
{
    Directory.CreateDirectory(mainDirectory);
}
program-files ×13
c# ×5
.net ×2
64-bit ×2
install ×2
windows ×2
32bit-64bit ×1
ant ×1
default ×1
directory ×1
java ×1
msbuild ×1
powershell ×1
python ×1
redirect ×1
security ×1
sql ×1
sql-server ×1
ssis ×1
uac ×1
windows-7 ×1
windows-xp ×1
windowserror ×1
x86 ×1
x86-64 ×1