Как установить настольный ярлык (на пакетном файле) из находящегося в WiX установщика, который “Работал, поскольку Администратор” включил?

Я устанавливаю настольный ярлык (на пакетном файле) из находящегося в WiX установщика - как я автоматически настраиваю этот ярлык с включенной установкой "Run as Administrator"? Целевая ОС является Windows Server 2008 R2, и установщик работает с поднятыми полномочиями.

Обновление:
Благодаря ссылке, предоставленной @Anders, я смог получить эту работу. Я должен был сделать это в C# CustomAction, таким образом, вот версия C# кода:

namespace CustomAction1
{
 public class CustomAction1
 {
  public bool MakeShortcutElevated(string file_)
  {
   if (!System.IO.File.Exists(file_)) { return false; }

   IPersistFile pf = new ShellLink() as IPersistFile;
   if (pf == null) { return false; }

   pf.Load(file_, 2 /* STGM_READWRITE */);
   IShellLinkDataList sldl = pf as IShellLinkDataList;
   if (sldl == null) { return false; }

   uint dwFlags;
   sldl.GetFlags(out dwFlags);
   sldl.SetFlags(dwFlags | 0x00002000 /* SLDF_RUNAS_USER */);
   pf.Save(null, true);
   return true;
  }
 }

 [ComImport(), Guid("00021401-0000-0000-C000-000000000046")]
 public class ShellLink { }

 [ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("45e2b4ae-b1c3-11d0-b92f-00a0c90312e1")]
 interface IShellLinkDataList
 {
  void AddDataBlock(IntPtr pDataBlock);
  void CopyDataBlock(uint dwSig, out IntPtr ppDataBlock);
  void RemoveDataBlock(uint dwSig);
  void GetFlags(out uint pdwFlags);
  void SetFlags(uint dwFlags);
 }
}
7
задан arathorn 22 April 2010 в 12:32
поделиться

1 ответ

Я предполагаю, что вам понадобится пользовательское действие и вызов COM-интерфейсов самостоятельно. Запросите IShellLink (или IPersistFile?) для IShellLinkDataList, затем: IShellLinkDataList->SetFlags(orgFlagsFromGetFlags|SLDF_RUNAS_USER);

Edit: Raymond has full sample code on his blog

6
ответ дан 7 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: