Winform应用程序未在64位服务器上运行

时间:2011-07-08 15:48:33

标签: winforms registry manifest uac windows64

我有一个winform应用程序来从registrykey读取值..

所以我知道我必须以管理员身份运行才能这样做。

我有两个win 2003服务器。一个是32位,另一个是64位。

当我在32位上运行此应用程序时,我没有问题,它从注册表中读取值..

但是当我从64位服务器运行应用程序时,它无法从注册表中读取。

我得到了

  

system.nullreferenceexception

因为我无法读取返回null的reg键的根目录。

我已经放了一个清单文件但是它也没有工作..

任何帮助将不胜感激...谢谢..

这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1">
 <asmv1:assemblyIdentity version="1.0.0.31" name="FileShareMgmt.exe" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
<application />
<entryPoint>
<assemblyIdentity name="FileShareMgmt" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
<commandLine file="FileShareMgmt.exe" parameters="" />
</entryPoint>
<trustInfo>
<security>
  <applicationRequestMinimum>
    <PermissionSet class="System.Security.PermissionSet" version="1"  Unrestricted="true" ID="Custom" SameSite="site" />
    <defaultAssemblyRequest permissionSetReference="Custom" />
  </applicationRequestMinimum>
  <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">       
<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
    <!-- UAC Manifest Options
        If you want to change the Windows User Account Control level replace the 
        requestedExecutionLevel node with one of the following.

    <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
    <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
    <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

        If you want to utilize File and Registry Virtualization for backward 
        compatibility then delete the requestedExecutionLevel node.
    -->     
  </requestedPrivileges>
</security>
</trustInfo>

这不是完整的清单,因为我认为不需要在这里展示......

1 个答案:

答案 0 :(得分:1)

您是否确认64位系统上存在您尝试读取的密钥?

64位系统的路径可能不同:http://support.microsoft.com/kb/896459

如果您的注册表项包含文本“WOW6432node”,那就是32位版本。 64位版本可能会相同,只是部分路径不在那里。

这个问题可能有关:Why is OpenSubKey() returning null on my Windows 7 64-bit system?