2013-07-20 3 views
0

У меня есть проблемы с правами UAC, вот мой конфиг:Как я могу выполнить команду пакетное с UAC администратором привилегий в WiX конфигурации

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <?define ProductName="AXClpb" ?> 
    <?define ProductVersion="1.0.0.0" ?> 
    <?define ProductCode="*"?> 
    <?define UpgradeCode="7352E479-0BEA-4055-B9E1-9699195DA4FB"?> 
    <?define Manufacturer="Aeroclub"?> 

    <Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="1049" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)"> 
    <Package InstallerVersion="200" Compressed="yes" InstallPrivileges="elevated" InstallScope="perMachine" /> 
    <Media Id="1" Cabinet="AXClpb.cab" EmbedCab="yes" /> 

    <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" /> 
    <Upgrade Id="$(var.UpgradeCode)"> 
     <UpgradeVersion 
     Minimum="1.0.0.0" Maximum="99.0.0.0" 
     Property="PREVIOUSVERSIONSINSTALLED" 
     IncludeMinimum="yes" IncludeMaximum="no" /> 
    </Upgrade> 

    <InstallExecuteSequence> 
     <RemoveExistingProducts Before="InstallInitialize" /> 
     <Custom Action="RegisterClipboardActiveX" Before="InstallFinalize">Installed</Custom> 
     <Custom Action="UnregisterClipboardActiveX" Before="RemoveFiles">Installed</Custom> 
    </InstallExecuteSequence> 

    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="ManufacturerFolder" Name="$(var.Manufacturer)"> 
      <Directory Id="INSTALLLOCATION" Name="$(var.ProductName)"> 
      <Component Id="ProductComponent1" Guid="A85287B1-2589-499E-91BD-83245242A648"> 
       <File Id='ClipboardActiveXDLL' Name='ClipboardActiveX.dll' Source='..\ClipboardActiveX\bin\Release\ClipboardActiveX.dll' Vital='yes' /> 
       <File Id='SetupInf' Name='setup.inf' Source='setup.inf' Vital='yes' /> 
       <RemoveFolder Id="INSTALLLOCATION" On="uninstall" /> 
      </Component> 

      <Directory Id="Regasm" Name="Regasm"> 
       <Component Id="ProductComponent2" Guid="BC68B576-232D-42E1-AE82-DC2BF8A170F1"> 
       <File Id='RegAsmExe' Name='RegAsm.exe' Source='regasm\RegAsm.exe' Vital='yes' /> 
       <File Id='RegAsmExeConfig' Name='RegAsm.exe.config' Source='regasm\RegAsm.exe.config' Vital='yes' /> 
       </Component> 
      </Directory> 

      <Directory Id="Elevation" Name="Elevation"> 
       <Component Id="ProductComponent3" Guid="728D7ADD-E122-4289-A8A9-F2D482743EB5"> 
       <File Id='Elevate32Exe' Name='Elevate32.exe' Source='elevation\Elevate32.exe' Vital='yes' /> 
       <File Id='Elevate64Exe' Name='Elevate64.exe' Source='elevation\Elevate64.exe' Vital='yes' /> 
       <File Id='IsElevated32Exe' Name='IsElevated32.exe' Source='elevation\IsElevated32.exe' Vital='yes' /> 
       <File Id='IsElevated64Exe' Name='IsElevated64.exe' Source='elevation\IsElevated64.exe' Vital='yes' /> 
       </Component> 
      </Directory> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 

    <CustomAction Id="RegisterClipboardActiveX" Directory="INSTALLLOCATION" ExeCommand="[SystemFolder]cmd.exe /C start start.bat" Return="check" Impersonate="no" Execute="deferred" /> 
    <CustomAction Id="UnregisterClipboardActiveX" Directory="INSTALLLOCATION" ExeCommand="[SystemFolder]cmd.exe /C start RegAsm.exe ClipboardActiveX.dll /u " Return="asyncNoWait" Impersonate="no" Execute="deferred" /> 

    <Feature Id="ProductFeature" Title="ClipboardActiveX" Level="1"> 
     <ComponentRef Id="ProductComponent1" /> 
     <ComponentRef Id="ProductComponent2" /> 
     <ComponentRef Id="ProductComponent3" /> 
    </Feature> 
    </Product> 
</Wix> 

Любой может предоставить мне полный ответ, как запустить свои собственные действия с привилегиями администратора UAC?

Я знаю о файле elevate.exe, но я ищу более элегантный способ сделать это.

Я очень ценю вашу помощь!

Update1: Split все несколько компонентов

ответ

2

Это не ответ на ваш вопрос, но это должно помочь вам автору установки ...

Во-первых, несколько вещей, которые вы должны рассмотреть следующие вопросы:

  • Возможно, RegAsm.exe не лицензировано для распространения, как вы это делаете.
  • Компоненты обычно должны иметь нулевой или один элемент файла. Ознакомьтесь с конструкцией компонентов и «Правилами компонентов»; начало here.
  • Реестр должен быть заменен стандартными таблицами и действиями Windows Installer, а не исполняемыми файлами, которые работают за пределами отслеживания установщика Windows. Когда это возможно, изменения реестра должны быть в том же компоненте, что и файл, зарегистрированный - таким образом, они обязательно придут и пойдут вместе.

Инструмент WiX's heat создаст авторинг для сборщиков .NET. Если вы используете Visual Studio и/или MSBuild для запуска WiX, вы можете использовать методы HarvestFile или HarvestProject (см. Документацию).

Или, с помощью командной строки:

heat file ..\ClipboardActiveX\bin\Release\ClipboardActiveX.dll -out ClipboardActiveX.wxs 

или

heat project ..\ClipboardActiveX\ClipboardActiveX.csproj -out ClipboardActiveX.wxs 
+0

Спасибо за ответ, я просматриваю свой код в понедельник, но вы знаете, как я могу иметь дело с высокой температурой и Вариант regasm/tlb? Мне нужен файл ClipboardActiveX.dll и ClipboardActiveX.tlb для успешной регистрации моей библиотеки – AuthorProxy

+0

Heat проверяет файл, чтобы определить, нужны ли ему различные типы регистрации. Он автоматически сгенерирует записи реестра, необходимые для COM-сервера, экспортированного из сборки .NET. (Ваши пользователи, вероятно, не нуждаются в файле .tlb, если это то, о чем вы просите.) –

Смежные вопросы