如何在WiX config中使用UAC管理员权限运行批处理命令
我对UAC权限有问题,以下是我的配置:如何在WiX config中使用UAC管理员权限运行批处理命令,wix,installation,cmd,uac,regasm,Wix,Installation,Cmd,Uac,Regasm,我对UAC权限有问题,以下是我的配置: <?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="*"?> &
<?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,但我会寻找更优雅的方法来实现这一点
非常感谢你的帮助
更新1:将所有组件拆分为多个组件这不是对您的问题的回答,但它应该可以帮助您编写安装程序 首先,您应该考虑以下几点:
- RegAsm.exe可能未按您的方式获得发行许可
- 组件通常应该有零个或一个文件元素。了解组件设计和“组件规则”;开始
- 注册表应该通过标准的Windows Installer表和操作进行更改,而不是通过在Windows Installer跟踪之外运行的可执行文件进行更改。只要有可能,注册表更改应该与正在注册的文件位于同一个组件中,这样一来,它们肯定会同时发生
heat
工具将生成.NET程序集的创作。如果使用Visual Studio和/或MSBuild运行WiX,则可以使用HarvestFile或HarvestProject tecnhiques(请参阅文档)
或者,通过命令行:
heat file ..\ClipboardActiveX\bin\Release\ClipboardActiveX.dll -out ClipboardActiveX.wxs
或
谢谢你的回答,我在周一复习了我的代码,但是你知道我如何处理heat和regasm/tlb选项吗?我需要ClipboardActiveX.dll和ClipboardActiveX.tlb文件才能成功注册我的库。热检查文件以确定是否需要各种类型的注册。它将自动生成从.NET程序集导出的COM服务器所需的注册表项。(如果您要求的是.tlb文件,那么您的用户可能不需要该文件。)
heat project ..\ClipboardActiveX\ClipboardActiveX.csproj -out ClipboardActiveX.wxs