我是wix安装程序的新手.我已经为我的应用程序使用wix安装程序开发了一个设置,我需要执行自定义操作以在cmd.exe中运行命令.在XP中它工作正常.但在Windows 8和7中,cmd提示符需要以管理员身份运行.
我用Google搜索并发现关键字Elevated Privileges和impersonate可能对我有所帮助.
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"></Package>
Run Code Online (Sandbox Code Playgroud)
如上所示,我使用了设置为perMachine的InstallScope属性,并且我在CustomAction元素中使用了Impersonate ="No":
<CustomAction Id='comReg' Directory='INSTALLLOCATION' Impersonate='no'
ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]myProduct.dll" /codebase' Return='check' />
Run Code Online (Sandbox Code Playgroud)
但是在安装时我没有得到任何改变.我需要命令提示符以管理员模式打开并运行上述命令.
任何人都可以告诉我这些关键词" 提升权限和模仿"
<InstallExecuteSequence>
<Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom>
<Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
怎么做?
我需要使用自定义操作将项目加载到组合框中.
UI.wxs:
<Control Id="Server" Type="ComboBox" X="30" Y="65" Width="200" Height="18" Property="DATABASE_SERVER">
<ComboBox Property="DATABASE_SERVER">
<ListItem Text="[DATABASE_SERVER]" Value="[DATABASE_SERVER]" />
</ComboBox>
<Publish Property="LOGON_VALID" Value="0">1</Publish>
</Control>
Run Code Online (Sandbox Code Playgroud)
自定义操作
private static ActionResult EnumSqlServersIntoComboBox(Session session, IEnumerable<DataRow> rows)
{
try
{
Debugger.Break();
session.Log("EnumSQLServers: Begin");
// Grab the combo box but make sure I'm getting only the one
// from WebAppInstallDlg.
View view = session.Database.OpenView("SELECT * FROM ComboBox WHERE ComboBox.Property='DATABASE_SERVER'");
view.Execute();
Int32 index = 1;
session.Log("EnumSQLServers: Enumerating SQL servers");
foreach (DataRow row in rows)
{
String serverName = row["Name"].ToString();
// …Run Code Online (Sandbox Code Playgroud)