이 문제는 두 가지 복잡하다 :
- UltraVNC에 64 비트 Windows에서 레지스트리의 64 비트 뷰에 자신을 설치, 그래서 우리는 두보기를 조회해야하고,
- RemoteRegistry의 ISN Windows Vista 이상에서는 기본적으로 실행되지 않습니다. 이것은 내가 생각 해낸 것입니다
: 다음
function RegConnectRegistry(machineName: String; hKeyRoot:Integer; var phKey: Integer): integer;
external '[email protected]';
function RegOpenKeyEx(hKeyRoot:Integer; subkey:string; reserved, access:integer; var phKey: Integer): integer;
external '[email protected]';
function RegQueryValueEx(hKey:Integer; value: String; reserved: integer; var pType: integer; data: string; var pDataLen:integer): integer;
external '[email protected]';
function RegCloseKey(hKey:Integer): integer;
external '[email protected]';
은 함수를 호출하는 것은 비교적 간단합니다. 대부분의 오류 처리는 간결성을 위해 생략되었습니다. 또한 비 REG_SZ 값을 읽으려고 시도하지 않습니다.
<target>
은 이름 또는 IP 주소로 대상입니다. <key>
및 <value>
은 쿼리 할 원격 키와 값입니다.
procedure CheckRemoteVNC();
var
HKRM, key: Integer;
data: string;
dwType, dataLen, retVal: Integer;
begin
data := '123456789'; { Padding. Digits so I can easily count how long it is. }
dataLen := 20
{ Make sure the Remote Registry service is running }
Exec('sc', ExpandConstant('\\<target> start RemoteRegistry'), '', SW_HIDE, ewWaitUntilTerminated, retVal)
RegConnectRegistry('<target>', HKEY_LOCAL_MACHINE, HKRM)
if RegOpenKeyEx(HKRM, '<key>', 0, 1 {KEY_QUERY_VALUE}, key) = 2 {Bad registry entry} then
{ Try the 64-bit view. }
retVal := RegOpenKeyEx(HKRM, '<key>', 0, 257 {0x101 == KEY_WOW64_64KEY | KEY_QUERY_VALUE}, key)
RegQueryValueEx(Key, '<value>', 0, dwType, data, dataLen)
data := Copy(data, 0, dataLen-1)
{ Deal with the data appropriately. }
if key <> 0 then RegCloseKey(key)
if HKRM <> 0 then RegCloseKey(HKRM)
end;
자세한 내용은 Microsoft's documentation on these functions을 참조하십시오.
Windows에 내장 된 것 외의 외부 도우미 응용 프로그램은 회사 정책으로 인해 고통입니다. 나는 오히려 파스칼에서 그것을 직접 할 것입니다. 앱을 원격으로 실행하는 문제가 해결되었습니다. Psexec은 멋지지만 Windows와 함께 제공되지 않는 외부 앱이므로 통증이 있습니다. – DaleStan
도우미 응용 프로그램은 설치 프로그램 자체에 포함되어 필요할 때 추출 할 수 있습니다. – Deanna
네,하지만 이것도 문제가 아닙니다. 아무리 평범한 가라면 사내 도우미 앱을 빌드 서버에 추가해야합니다. 집 밖의 도우미를 위해, 우리는 그것을 사용하는 업데이트를 마지막으로 릴리스 한 후 적어도 1 년 동안 똑같은 버전을 찾을 수 있어야합니다. – DaleStan