2010-04-13 31 views
7

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

更新:
多亏了@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 2010-05-14 21:24:56

+0

别忘了:使用System.Runtime.InteropServices.ComTypes; – David 2016-05-13 16:38:16

回答

6

我猜你会需要一个自定义操作,并呼吁自己的COM接口。查询的IShellLink(或IPersistFile?)对IShellLinkDataList,则:IShellLinkDataList->SetFlags(orgFlagsFromGetFlags|SLDF_RUNAS_USER);

编辑:雷蒙德在他的blog

相关问题