Tag: 64位

枚举所有已安装的程序集版本(在GAC中)

是否可以使用C#枚举GAC中所有已安装的程序集版本? 例如,我有一个名为“My.Assembly”的程序集。 程序集可能有各种版本(“1.0.0.0”,“2.3.4.5”,“0.1.2.4”,…),可以针对各种平台(x86,x64,任何CPU)进行编译。 现在我需要一种方法来确定安装了哪个版本/平台。 我知道我可以枚举GAC中的目录,但这似乎是错误的。 应该有更好的方法来做到这一点。 背景我有一个启动器应用程序,用户在其中选择一个DLL。 启动程序从DLL中检索一些信息(不加载它),然后必须启动正确的托管C#应用程序来处理DLL。 DLL可以针对Win32或x64编译,暴露始终是相同的(平台无关的)接口。 我使用LoadLibrary函数在C#应用程序中加载DLL。 唯一的问题是该过程必须是匹配格式(x86或x64)。 可以而且应该为x86,x64和任何CPU编译C#应用程序。

“无法找到运行此应用程序的运行时版本”,适用于64位Windows上的32位应用程序

我正在开发一个32位WinForm应用程序(目标:.NET 3.5)。 我的客户端坚持将应用程序安装到“Windows \ System32 \ clientname”文件夹中并在启动时自动启动。 此外,应用程序必须是32位,所以我不能使用“任何CPU”。 我正在使用VS2010在Win7 x64下进行开发,并且安装了所有版本的.NET。 当我启动应用程序时,我收到消息“无法找到运行此应用程序的运行时版本”。 在Win7 x86上它没有问题。 它不是应用程序本身,我100%确定所有必需的框架都已安装。 我知道在x64系统上这个文件夹不能用于32位应用程序,但正如我所说:客户坚持并且不会让步。 在我明确告诉客户无法完成之前,我想探索所有选项。 我当然用Google搜索并搜索了这个好网站,但没有对我的特殊情况有所帮助。 我的应用程序生成另一个位于同一文件夹中的32位进程。 当然,在x64上也不起作用,但我通过使用“Wow64DisableWow64FsRedirection”解决了这个问题,然后将其复制到另一个位置以从那里启动它(工作正常)。 我完成了我的作业,但我找不到在x64和特定文件夹下启动主应用程序的解决方案。 有吗?

.net控制台应用程序32对64位

.NET中的应用程序是否需要以64位构建才能充分利用具有64位操作系统的计算机,或者它是否会像32位构建一样利用它。 基本上,我们遇到内存不足exception的问题,并建议在64位盒子上运行控制台应用程序“可能”解决问题。 问题是我们可以启动64个框并将当前应用程序抛出或者我需要以64位方式重建应用程序。

由于格式不正确,加载程序集失败

我在一个非常大的Windows窗体.net(C#)应用程序上开发了几个程序集。 最初每个组件都是为Target Platfom“Any CPU”构建的。 由于x64机器上的Crystal Reports存在问题,我们必须为x86目标平台构建整个项目。 我重新开始为x86重建一些项目,它运行得很好。 但有一个我有问题,当我尝试在另一个程序集中使用它作为参考时,另一个不会加载它给出以下错误: 无法加载文件或程序集#MyAssembly#或其依赖项之一。 尝试加载格式不正确的程序。 在具有多个程序集的示例项目中使用Crystal进行游戏时,我发现当为不同的目标平台构建项目时会发生此错误。 但这不是这种情况。 我为X86构建了每个Project,并且无法弄清楚问题出在哪里。

沉默的例外,

我在64位遇到了这个奇怪的静默exception问题。 这是什么造成这种行为? 我想了解为什么会出现这种情况以及推荐的解决方案是什么? 消失的OnLoadexception 微软 – 沉默的例外 KB976038 在主要: try { Application.Run(new Form1()); } catch (Exception ex) { MessageBox.Show(“Error”); } private void Form1_Load(object sender, EventArgs e) { throw new Exception(“oh no!”); }

进程内存限制为64位进程

我目前有一个32位.Net应用程序(在x86 Windows上)需要大量内存。 最近它开始抛出System.OutOfMemoryException了。 所以,我打算将它作为64位进程转移到x64平台。 因此,这将有助于内存不足exception。 我正在从Windows的 MSDN 内存限制中阅读本文 所以,我的问题是如果我编译一个64位的.Net应用程序,它是否将IMAGE_FILE_LARGE_ADDRESS_AWARE设置为默认值(正如文章建议的那样)? 即我能够利用8GB用户模式虚拟地址空间吗?

C#System.Diagnostics.Process:无法在64位操作系统中启动32位exe文件

我有一个使用Turbo Pascal编译的32位exe文件。 我需要启动它。 当我使用Windows 7 32位时它运行良好,但现在我使用的是Windows 7 64位,我得到以下exception: 指定的可执行文件不是此OS平台的有效应用程序。 为了确保它在32位系统上运行,我在32位平台上启动了C#程序 – 它可以工作。 那么如何在64位操作系统中启动32位exe文件? 谢谢

SetValue 64位机器注册表

我想在下面的注册表路径中为’NoModify’设置一个值。 “HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载\ XXXX” 我使用下面的代码,它只适用于X86机器。 你能看出为什么这对x64机器不起作用的原因吗? // This value is correct RegistryView registryView = releaseFlags.Contains(“PLATFORM_X86″) ? RegistryView.Registry64 : RegistryView.Registry32; using (RegistryKey hkeyLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView)) { RegistryKey noModifyKey = hkeyLocalMachine.OpenSubKey(@”SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{xxxx}”, true); //SL: Key Name if (noModifyKey != null) { noModifyKey.SetValue(“NoModify”, 0); noModifyKey.Flush(); } }

正确的方法来检测CPU架构?

我正在尝试检测正确的cpu架构,以安装x86 msi或x64 msi文件。 如果我是对的,对于msi我需要os cpu架构 我不完全确定我的方式是否正确,因为我无法测试它。 你怎么看? private static string GetOSArchitecture() { string arch = System.Environment.GetEnvironmentVariable(“PROCESSOR_ARCHITECTURE”); string archWOW = System.Environment.GetEnvironmentVariable(“PROCESSOR_ARCHITEW6432”); if(archWOW != null && archWOW != “” && archWOW.Contains(“64”)) return “x64”; if(arch.Contains(“86”)) return “x86”; if (arch.Contains(“64”)) return “x64”; return “”; }

64位VB.NET分配> 2GB的RAM(.NET错误?)

我有一个64位的VB.NET应用程序,并希望分配一个> 2GB的缓冲区。 在下面的代码中,“new”和“ReDim”都抛出“OverflowException”。 当这些函数只接受带符号的32位值时,如何分配> 2GB的缓冲区? (这可能在C#中?) 编辑 – 我正在运行带有4GB RAM的WinXP 64。 昏暗宽度As Long = 19005 昏暗高度As Long = 32768 Dim buffer()By Byte = New Byte((width * height * 4) – 1){} 昏暗的大小As Long =(width * height * 4) – 1 ReDim缓冲区(大小)