gpt4 book ai didi

windows - 如何从启用了 "Run as Administrator"的基于 WiX 的安装程序安装桌面快捷方式(到批处理文件)?

转载 作者:可可西里 更新时间:2023-11-01 13:11:22 27 4
gpt4 key购买 nike

我正在从基于 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);
}
}

最佳答案

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

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

关于windows - 如何从启用了 "Run as Administrator"的基于 WiX 的安装程序安装桌面快捷方式(到批处理文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com