سؤال

لقد كتبت مثبت WIX يعمل بشكل مثالي باستخدام نظام التشغيل Windows XP، ولكن عند التثبيت إلى مربع Windows 7، أعد صعوبة في صعوبة إدخالات التسجيل. أحتاج إلى إضافة إدخال HKLM بالإضافة إلى إدخال التسجيل للبرنامج لإظهاره في القائمة ابدأ. هنا هو الرمز الذي أستخدمه لكلا النوعين من الإدخال:

<!-- Create the registry entries for the program -->
<DirectoryRef Id="TARGETDIR">
  <Component Id="RegistryEntriesInst" Guid="...">
    <RegistryKey Root="HKLM"
                 Key="Software\$(var.Manufacturer)\$(var.ProductName)"
          Action="createAndRemoveOnUninstall">
      <RegistryValue
          Type="string"
          Name="installed"
          Value="true"
          KeyPath="yes"/>
    </RegistryKey>
  </Component>
  <Component Id="RegistryEntriesVer" Guid="...">
    <RegistryKey Root="HKLM"
                 Key="Software\$(var.Manufacturer)\$(var.ProductName)"
          Action="createAndRemoveOnUninstall">
      <RegistryValue
          Type="string"
          Name="version"
          Value="$(var.ProductVersion)"
          KeyPath="yes"/>
    </RegistryKey>
  </Component>
</DirectoryRef>

<!-- To add shortcuts to the start menu to run and uninstall the program -->
<DirectoryRef Id="ApplicationProgramsFolder">
  <Component Id="ApplicationShortcut" Guid="...">
    <Shortcut Id="ApplicationStartMenuShortcut"
              Name="$(var.ProductName)"
              Description="..."
              Target="[SERVERLOCATION]$(var.Project.TargetFileName)"
              WorkingDirectory="SERVERLOCATION"/>
    <Shortcut Id="UninstallProduct"
                  Name="Uninstall $(var.ProductName)"
                  Description="..."
                  Target="[System64Folder]msiexec.exe"
                  Arguments="/x [ProductCode]"/>
    <RemoveFolder Id="SERVERLOCATION" On="uninstall"/>
    <RegistryValue
        Root="HKCU"
        Key="Software\$(var.Manufacturer)\$(var.ProductName)"
        Name="installed"
        Type="integer"
        Value="1"
        KeyPath="yes"/>
    </Component>
</DirectoryRef>

كيف يمكنني حل هذه المشكلة؟

في ملاحظة جانبية، فإن أذونات التسجيل هي نفسها على أجهزة كمبيوتر Windows XP و Windows 7.

هل كانت مفيدة؟

المحلول

لقد اكتشفت لماذا يحدث هذا.

مع تجميع مثبت WIX على منصة X86، التقط نظام التشغيل Windows 7 كمبرد 32 بت مع مفاتيح التسجيل 32 بت. مقابض Windows 7 64 بت إدخالات التسجيل 32 بت من خلال القيام بما رأيته يحدث.

كان البرنامج مسجلا؛ لم يكن فقط في الجزء 64 بت من السجل. تجميعها تحت منصة X64 مع إجراء التغييرات اللازمة لجعلها لنظام 64 بت (تصبح البرمجة ForgeFils64Folder، وما إلى ذلك)، وسوف تضع الأمور في المكان المناسب.

نصائح أخرى

شكرا لحل هذا أساسا هذا بالنسبة لي!

أردت فقط أن أضيف أنك لا تحتاج بالضرورة إلى تغيير كل شيء ليكون x64 لهذا العمل، فقط يحتاج المكون المعني إلى علامة x64.

<Component Id="MyShellExtension64.dll" Guid="..." Win64="yes">
  <Condition>VersionNT64</Condition>
  <File
    Name="MyShellExtension64.dll"
    Source="MyShellExtension64.dll"
    KeyPath="yes"/>
  <RegistryValue
    Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
    Name="{GUID}" Value="My Shell Extension" Type="string"/>
</Component>

لاحظ ال Win64 = "نعم", ، هذا هو كل ما هو مطلوب للكتابة إلى منطقة 64 بت من السجل. حالة VersionNT64 موجودة حتى يتم تثبيت هذا المكون فقط على نظام X64.

في حالتي، يوفر هذا تحذيرات ICE80 لأنني أرغب في تثبيت مكون 64 بت في ProgramFilesfilleder 32 بت. يسعدني أن أتجاهلها لأن تطبيقي الرئيسي ليس X64، فقط تمديد Shell، ولا أريد وضع ملحق Shell في مجلد خاص به.

هناك بعض الاختلافات في كيفية معالجة نظام التشغيل Windows 7 مفاتيح التسجيل معينة. تمت إزالة انعكاس التسجيل بدءا من Windows 7. لست متأكدا مما إذا كان هذا يلعب في ما تراه هنا، ولكن تحقق من هذا الرابط لمزيد من ذلك.

أيضا، إذا كنت تعمل مع إصدار 64 بت من Windows 7، فقد تكون قادرا على الحفر إلى بعض التفاصيل من خلال الإشارة إلى MSDN دليل برمجة Windows 64 بت.

علاوة على ذلك، إذا كنت بحاجة إلى تثبيت مفاتيح التسجيل المختلفة في مواقع مختلفة بناء على نكهة Windows (XP، Vista، 7، إلخ) ثم هذا السؤال تجاوز سعة مكدس لديها أيضا إجابة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top