如何从具有“以管理员身份运行"的基于WiX的安装程序中安装桌面快捷方式(批处理文件).启用? [英] How to install a desktop shortcut (to a batch file) from a WiX-based installer that has "Run as Administrator" enabled?

查看:227
本文介绍了如何从具有“以管理员身份运行"的基于WiX的安装程序中安装桌面快捷方式(批处理文件).启用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从基于WiX的安装程序安装桌面快捷方式(到批处理文件)-如何在启用以管理员身份运行"设置的情况下自动配置此快捷方式?目标操作系统是Windows Server 2008 R2,并且安装程序以提升的特权运行.

I'm installing a desktop shortcut (to a batch file) from a WiX-based installer -- how do I automatically configure this shortcut with the "Run as Administrator" setting enabled? The target OS is Windows Server 2008 R2, and the installer is running with elevated priveleges.

更新:
感谢@Anders提供的链接,我能够使它正常工作.我需要在C#CustomAction中执行此操作,因此这是代码的C#版本:

Update:
Thanks to the link provided by @Anders, I was able to get this working. I needed to do this in a C# CustomAction, so here is the C# version of the code:

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);
 }
}

推荐答案

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

I'm guessing you would need a custom action and call the COM interfaces on your own. Query IShellLink (or IPersistFile?) for IShellLinkDataList, then: IShellLinkDataList->SetFlags(orgFlagsFromGetFlags|SLDF_RUNAS_USER);

Raymond在博客上有完整的示例代码

这篇关于如何从具有“以管理员身份运行"的基于WiX的安装程序中安装桌面快捷方式(批处理文件).启用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆