【问题标题】:How to install a desktop shortcut (to a batch file) from a WiX-based installer that has "Run as Administrator" enabled?如何从启用了“以管理员身份运行”的基于 WiX 的安装程序安装桌面快捷方式(到批处理文件)?
【发布时间】:2010-04-13 20:49:52
【问题描述】:

我正在通过基于 WiX 的安装程序安装桌面快捷方式(到批处理文件)——如何在启用“以管理员身份运行”设置的情况下自动配置此快捷方式?目标操作系统是 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);
 }
}

【问题讨论】:

  • 感谢您发布您的解决方案!我非常需要这个。
  • 别忘了:使用 System.Runtime.InteropServices.ComTypes;
  • 我怎样才能执行上面的代码。现在我必须做和你一样的事情。请帮助我

标签: windows installation wix shortcut


【解决方案1】:

我猜您需要自定义操作并自行调用 COM 接口。为 IShellLinkDataList 查询 IShellLink(或 IPersistFile?),然后:IShellLinkDataList->SetFlags(orgFlagsFromGetFlags|SLDF_RUNAS_USER);

编辑:Raymond 在他的blog 上有完整的示例代码

【讨论】:

  • 这是一个powershell脚本吗?链接失效了
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2017-05-27
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多