如何从启用了“作为管理员运行”的WiX安装程序中安装桌面快捷方式(到批处理文件)?

9
我正在安装一个基于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);
 }
}

1
感谢您发布您的解决方案!我非常需要它。 - Ben
不要忘记:使用 System.Runtime.InteropServices.ComTypes; - BeanFlicker
我该如何执行上述代码?现在我需要做和你一样的事情。请帮助我。 - Gopi P
1个回答

7
我猜您需要一个自定义操作并自己调用COM接口。查询IShellLink(或IPersistFile?)以获取IShellLinkDataList,然后:IShellLinkDataList->SetFlags(orgFlagsFromGetFlags|SLDF_RUNAS_USER); 编辑:Raymond在他的博客上有完整的示例代码。

这是一个PowerShell脚本吗?链接已失效。 - Jody Sowald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接