2010-04-13 1 views
7

WiX 기반 설치 프로그램에서 바탕 화면 바로 가기 (배치 파일)를 설치하고 있습니다. "관리자 권한으로 실행"설정이 활성화 된 상태에서이 바로 가기를 자동으로 구성하려면 어떻게합니까? 대상 OS는 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

+0

잊지 말고 : using System.Runtime.InteropServices.ComTypes; – David

답변

6

난 당신이 사용자 지정 작업이 필요하고 자신의 COM 인터페이스를 호출 할 것 같은데요. 쿼리 셸 링크는 IShellLink (또는 IPersistFile?) IShellLinkDataList를 들어, 다음 : IShellLinkDataList->SetFlags(orgFlagsFromGetFlags|SLDF_RUNAS_USER);

편집 : 레이몬드 솔루션을 게시 그의 blog

관련 문제