windows – 如何从启用了“以管理员身份运行”的基于WiX的安装程序安装桌面快捷方式(批处理文件)?

前端之家收集整理的这篇文章主要介绍了windows – 如何从启用了“以管理员身份运行”的基于WiX的安装程序安装桌面快捷方式(批处理文件)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在从基于WiX的安装程序安装桌面快捷方式(到批处理文件) – 如何在启用“以管理员身份运行”设置的情况下自动配置此快捷方式?目标操作系统是 Windows Server 2008 R2,安装程序正在使用提升的priveleges运行.

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

  1. namespace CustomAction1
  2. {
  3. public class CustomAction1
  4. {
  5. public bool MakeShortcutElevated(string file_)
  6. {
  7. if (!System.IO.File.Exists(file_)) { return false; }
  8.  
  9. IPersistFile pf = new ShellLink() as IPersistFile;
  10. if (pf == null) { return false; }
  11.  
  12. pf.Load(file_,2 /* STGM_READWRITE */);
  13. IShellLinkDataList sldl = pf as IShellLinkDataList;
  14. if (sldl == null) { return false; }
  15.  
  16. uint dwFlags;
  17. sldl.GetFlags(out dwFlags);
  18. sldl.SetFlags(dwFlags | 0x00002000 /* SLDF_RUNAS_USER */);
  19. pf.Save(null,true);
  20. return true;
  21. }
  22. }
  23.  
  24. [ComImport(),Guid("00021401-0000-0000-C000-000000000046")]
  25. public class ShellLink { }
  26.  
  27. [ComImport(),InterfaceType(ComInterfaceType.InterfaceIsIUnknown),Guid("45e2b4ae-b1c3-11d0-b92f-00a0c90312e1")]
  28. interface IShellLinkDataList
  29. {
  30. void AddDataBlock(IntPtr pDataBlock);
  31. void CopyDataBlock(uint dwSig,out IntPtr ppDataBlock);
  32. void RemoveDataBlock(uint dwSig);
  33. void GetFlags(out uint pdwFlags);
  34. void SetFlags(uint dwFlags);
  35. }
  36. }
我猜你需要一个自定义动作并自己调用COM接口.查询IShellLinkDataList的IShellLink(或IPersistFile?),然后:IShellLinkDataList-> SetFlags(orgFlagsFromGetFlags | SLDF_RUNAS_USER);

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

猜你在找的Windows相关文章