Tag: x86 64

Windows 7中未经授权的访问exception

我有一个应用程序在启动时读取许可证文件。 我的安装在应用程序的Program Files中创建文件夹,创建许可证文件夹并将许可证文件放在那里。 但是,当我尝试运行该应用程序时,它需要读取/更新许可证文件。 当我尝试这样做时,我得到“未经授权的访问例外”。 我以管理员身份登录,手动运行该程序。 知道为什么即使路径正确我也无法访问该文件? 但是在安装中它创建文件和文件夹就好了吗? 我有MyApplication.exe,我的许可证阅读器位于一个名为MyApplicationTools的独立DLL中。 我正在读取/写入许可证文件,如下所示: //Read StreamReader reader = new StreamReader(path + “license.lic”); //Write StreamWriter writer2 = new StreamWriter(path + “License.lic”); string str = Convert.ToBase64String(sharedkey.Key); writer2.WriteLine(str); writer2.Close(); 谢谢

如何在运行时后期绑定32位/ 64位lib

我遇到的问题与此处描述的类似,但略有不同(加载程序集及其依赖项)。 我有一个用于3D渲染的C ++ DLL,这是我们向客户销售的产品。 对于.NET用户,我们将有一个CLR包装器。 C ++ DLL可以在32位和64位版本中构建,但我认为这意味着我们需要有两个CLR包装器,因为CLR绑定到特定的DLL? 现在说我们的客户有一个可以是32位或64位的.NET应用程序,并且它是一个纯粹的.NET应用程序,它让CLR从一组程序集中解决它。 问题是应用程序代码如何在运行时动态选择我们的32位和64位CLR / DLL组合? 更具体地说,这里适用的上述问题的建议答案也是如此(即创建一个ResolveEvent处理程序)?

为什么Math.Exp在32位和64位之间给出不同的结果,具有相同的输入,相同的硬件

我使用.NET 2.0与PlatformTarget x64和x86。 我给Math.Exp输入相同的输入数,并且它在任一平台上都返回不同的结果。 MSDN说你不能依赖文字/解析的Double来表示平台之间的相同数字,但我认为我在下面使用Int64BitsToDouble可以避免这个问题,并保证在两个平台上输入相同的Math.Exp。 我的问题是为什么结果不同? 我原以为: 输入以相同的方式存储(双/ 64位精度) 无论处理器的位数如何,FPU都会进行相同的计算 输出以相同的方式存储 我知道我不应该比较15/17位数后的浮点数,但我对这里的不一致感到困惑,看起来在同一硬件上看起来是相同的操作。 任何人都知道引擎盖下发生了什么? double d = BitConverter.Int64BitsToDouble(-4648784593573222648L); // same as Double.Parse(“-0.0068846153846153849”) but with no concern about losing digits in conversion Debug.Assert(d.ToString(“G17”) == “-0.0068846153846153849” && BitConverter.DoubleToInt64Bits(d) == -4648784593573222648L); // true on both 32 & 64 bit double exp = Math.Exp(d); Console.WriteLine(“{0:G17} = {1}”, exp, BitConverter.DoubleToInt64Bits(exp)); // […]

如何以编程方式检查托管程序集是x86,x64还是AnyCPU?

我需要以编程方式确定程序集是x86,x64还是AnyCPU? 有一个几乎相同的问题 ,但它提供的解决方案 Assembly assembly = Assembly.LoadFrom(fileName); PortableExecutableKinds peKind; ImageFileMachine imageFileMachine; assembly.ManifestModule.GetPEKind(out peKind, out imageFileMachine); 尝试从32位进程加载64位程序集时失败(反之亦然)。 是否有一种以编程方式查找程序集的编译类型的万无一失的方法? 编辑:基于@BenVoigt的建议,我创建了一个小命令行实用程序 ,用于检查DLL是否受管理以及是否为x86 / x64 / AnyCPU。 我希望有人觉得它很有用。

64位.NET应用程序中的32位ActiveX控件

我正在创建一个C#.Net应用程序,我想能够为“所有CPU”编译。 我还想在这个应用程序的UI中包含一个特定的ActiveX控件,但我试图使用的ActiveX控件不支持32位。 是否有一些技巧或解决方法我可以使用这个控件来工作? 如何在Web浏览器控件中嵌入ActiveX控件呢? 这会工作吗?

在64位计算机上运行32位C#应用程序

如何强制我的应用程序在64位计算机上以32位运行? 代码是用C#编写的。

从同一应用程序读取和写入x86和x64注册表项

我正在运行编译为x86的应用程序,它运行在64位Windows上。 为了解决ClickOnce文件关联的问题,我想从注册表的x86视图中读取一些CLSID值,然后将它们写入x64视图。 要清楚,这意味着从x86应用程序我想同时从x86注册表视图读取,然后写入x64注册表视图。 我想在HKEY_CURRENT_USER\Software\Classes\CLSID\{my clsid}下找到我找到的值,并将它们写入HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{my clsid} 。 我该怎么做? 使用RegistryView会产生意外结果。 例如,此OpenSubKey调用返回null: keyPath = @”Software\Classes\CLSID\” + clsid; var regularx86View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32); var regularClassKey = regularx86View.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree); 如果我使用RegistryView.RegistryDefault或RegistryView.Registry64而不是它返回密钥 – 但我希望它在使用Registry64时返回null,因为该密钥在x64视图中不存在,并且不应该发生重定向。 使用RegistryView正在做的事情,还是我应该直接使用WinAPI?