2012-09-29 3 views
1

다음 코드를 사용하여 Delphi에서 바로 가기를 만듭니다. 바로 가기의 권한 수준 속성에서 "관리자 권한으로이 프로그램 실행"확인란을 선택하여 바로 가기를 만들고 싶습니다. 이 일을 할 수있는 방법이 있습니까?델파이로 바로 가기를 만들고 특권 레벨을 지정하십시오.

function MakeShortcut(Dst, Src: String; Desc: String = ''; Arg: String = ''; WorkDir: String = ''; Icon: String = ''; IconI: Integer = 0; Show: Integer = SW_SHOWNORMAL; HotKey: Word = 0): Boolean; 
var 
    u: IUnknown; 
    s: IShellLink; 
    f: IPersistFile; 
    p: WideString; 
begin 
try 
    u := CreateComObject(CLSID_SHELLLINK); 
    s := u as IShellLink; 
    f := u as IPersistFile; 
    s.SetPath(PChar(Src)); 
    if (WorkDir = '') then WorkDir := ExtractFileDir(Src); 
    s.SetWorkingDirectory(PChar(WorkDir)); 
    if (Icon = '') then Icon := Src; 
    s.SetIconLocation(PChar(Icon), IconI); 
    s.SetDescription(PChar(Desc)); 
    s.SetArguments(PChar(Arg)); 
    s.SetShowCmd(Show); 
    s.SetHotkey(HotKey); 
    p := Dst; 
    Result := Succeeded(f.Save(PWChar(p), False)); 
except 
    Result := False; 
end; 
end; 
+0

주, 그것은 EXE 자체 (또는 오히려 현재의 경로)에 호환성 플래그입니다. 응용 프로그램 shoudl 정말 그 매니 페스트에 플래그입니다. – Deanna

+0

@Deanna 아니요. 응용 프로그램이 항상 admin으로 실행되는 것을 원하지 않습니다. 특수 명령 줄 인수가 전달되면 관리자로 실행하고 싶습니다. Like : "myapp.exe/install" – Vahid

답변

4

당신은 SLDF_RUNAS_USER을 통과 IShellLinkDataList::SetFlags()를 사용해야합니다.

코드 샘플을 준비하고 있지 않습니다. 그러나 기본적인 접근 방식은 다음과 같이 될 것입니다 : "실행 관리자로"플래그 바로 가기의 속성이 아닌 것을

sldl := s as IShellLinkDataList; 
flags := sldl.GetFlags(); 
sldl.SetFlags(flags or SLDF_RUNAS_USER); 
관련 문제