| |
|
|
maroro | Ciao,
es hat mal funktioniert. Vermutlich seit einem Microsoftupdate nicht mehr. Ich schreibe Xprofan Programme die auf eine Active Directory zugreifen. Da ich das nicht selbst ansprechen kann gehe Io l' Umweg circa Dsquery.exe und Dsget.exe deren Ausgaben ich circa die Zwischenablage in das Programm hole. Wenn ich eine CMD öffne und die die beiden Programme benutze geht das nach wie vor problemlos. Wenn ich mit XProfan eine CMD öffen werden die beiden File nicht gefunden und mit dir auch nicht aufgelistet. Auf dem Rechner vom Kollegen das gleiche. Beide Win8.1 ...auf Windows 7 ohne Updates geht es. Was ist an der CMD die XProfan öffnet anders? Wie bekomme ich das wieder zum laufen? |
|
|
| |
|
|
|
ByteAttack | Also unter Server 2016 funktioniert das?
Hier mal ein Beispiel mit dsquery server ohne Zwischenablage
$H Windows.ph
$H Structs.ph
Struct PROCESS_INFORMATION = ~PROCESS_INFORMATION
Struct SECURITY_ATTRIBUTES = ~SECURITY_ATTRIBUTES
Struct STARTUPINFO = ~STARTUPINFO
DEF &NORMAL_PRIORITY_CLASS $20
DEF &STARTF_USESTDHANDLES $100
DEF &STARTF_USESHOWWINDOW $1
CLS ~GetSysColor(~COLOR_BTNFACE)
SetDialogFont ~GetStockObject(~ANSI_VAR_FONT)
Var Ende& = 0
Var Multi& = Create("MultiEdit",%hwnd,"",1,10,500,400)
Var Button& = Create("Button",%hwnd,"Start",540,10,80,24)
Var Button1& = Create("Button",%hwnd,"Ende",540,40,80,24)
Whilenot Ende&
Waitinput
If Clicked(Button1&)
Ende& = 1
ElseIf Clicked(Button&)
' DSQUERY
DirektDosOutputToMultiedit("", "dsquery server",255,Multi&)
Endif
EndWhile
End
Proc DirektDosOutputToMultiedit
Parameters Progname$,Command$,MemBuffer&,Multiedit&
Declare hRPipe&,hWPipe&,pRBytes&,Result&
Declare PI#,SI#,SA#
Dim PI#,PROCESS_INFORMATION
Dim SI#,STARTUPINFO
Dim SA#,SECURITY_ATTRIBUTES
Declare StringBuffer$
StringBuffer$ = Space$(MemBuffer&)
SA#.nLength& =SizeOf(SA#)
SA#.bInheritHandle& = 1
SA#.lpSecurityDescriptor& = 0
Result& = ~CreatePipe(Addr(hRPipe&), Addr(hWPipe&), SA#, 0)
If Result& = 0
MessageBox("Pipe konnte nicht gestartet werden","",0)
End
Endif
If Progname$ <> ""
Command$ = " " + Command$
Endif
SI#.cb& = SizeOf(SI#)
SI#.dwFlags& = &STARTF_USESHOWWINDOW | &STARTF_USESTDHANDLES
SI#.hStdOutput& = hWPipe&
SI#.hStdError& = hWPipe&
If Progname$ = ""
Result& = ~CreateProcess(0, Addr(Command$), SA#, SA#, 1, &NORMAL_PRIORITY_CLASS, 0, 0, SI#,PI#)
Else
Result& = ~CreateProcess(Addr(Progname$), Addr(Command$),SA#,SA#,1,&NORMAL_PRIORITY_CLASS, 0, 0,SI#,PI#)
Endif
If Result& <> 1
MessageBox("Datei nicht gefunden","",0)
End
Else
Endif
Result& = ~CloseHandle(hWPipe&)
Var out$ = ""
While Result& <> 0
Result& = ~ReadFile(hRPipe&,Addr(StringBuffer$),MemBuffer&,Addr(pRBytes&), 0)
If pRBytes& > 0
Out$ = Left$(StringBuffer$,pRBytes&)
~OemToChar(Addr(Out$),Addr(Out$))
Settext Multiedit&,GetText$(Multiedit&)+Out$
Endif
Endwhile
~CloseHandle(PI#.hProcess&)
~CloseHandle(PI#.hThread&)
~CloseHandle(hRPipe&)
Dispose PI#,SI#,SA#
EndProc
|
|
|
| |
|
|
|
ByteAttack | Sollte das auch nicht funktionieren, probiere doch einfach mal circa eine Batch File:
Beispiel: dsquery.cmd
Beispiel XProfan-Source
|
|
|
| |
|
|
|
maroro | Vielen dank per den Input. Ich brauche auch noch dsget ...will nur lesen nichts ändern. auf Server 2012 funktioniert es mit aktuellsten Updatestand. Win7 aktuell habe ich nicht getestet. Win 8.1 bis ca. vor einem halben Jahr. Win10 will ich morgen testen. Server 2016 steht mir nicht zur Verfügung. Batchdateien an sich funktionieren...aber nicht wenn ich sie von X Profan aus aufrufe.Das è die beiden Befehle funktionieren nicht der Rest schon.
XProfan ist die Version 13
Die Umgehung der Zwischenablage löst das Problem leider nicht. die dsquery.cmd funktioniert auch vom Hand gestartet circa shellexec geht es nicht. |
|
|
| |
|
|
|
Michael W. | Die schönsten Rätsel sind immer die ohne einen Beispielcode.
Ist da evtl. nur das falsche Verzeichnis angesprochen worden?
Ich habe leider keinen Server zur Hand. Und ohne ein Quellcode-Schnippselchen ist da nichts zu machen.
Wenn die beiden File nicht im Pfad stehen, dann hilft eine direkte Pfadangabe.
Und Zwischendateien schreibt man auch possibile nicht ins Hauptverzeichnis. |
|
|
| |
|
|
|
ByteAttack | Michael W. (18.10.2017)
Und Zwischendateien schreibt man auch possibile nicht ins Hauptverzeichnis.
War ja auch nur als Beispiel
Also die beiden File liegen beim Server Standardgemäß in C:\Windows\SysWOW64 |
|
|
| |
|
|
|
maroro | also unter Win10 funktioniert es auch nicht. es geht nicht um Fehler im Code es geht um die CMD.EXE wenn ich sie per "Hand" aufrufe funktioniert alles wenn ich sie aus XProfan aufrufe funktioniert DSQUERY und DSGET nicht, alles andere wie DIR zb. funktioniert. Ich bin also nicht zu blöd eine CMD von XProfan aus aufzurufen sie verhält sich danach nur anders. Dir zeigt die DSQUERY.EXE nicht an die DSQUERY.DLL schon. wenn ich CMD von "Hand" aufrufe zeigt DIR beide File an. In beiden Fällen wird die CMD im Context meines Benutzers corsa(zumindest wird mir das so angezeigt). auch ein ausführen als Administrator ändert nichts.
DSQUERY und DSGET sind Bestandteile von Remote Server Administrations Tool (RSAT) ...das muss installiert sein.
Quellcode: winExec(getEnv$("COMSPEC")+" /k chcp 850 && dsget..... oder ShellExec("dsquery.exe","open",0)
bei mir liegen die File im C:Windows\system32 und das liegt im Path. Auch direktes Ansprechen via C:\windows\system32\dsquery.exe funktioniert nicht aus Xprofan. |
|
|
| |
|
|
|
ByteAttack | So! Auch mal geprüft! Mit WinExec läßt sich die File nicht direkt aufrufen obwohl die eigentlich da ist (getestet mit Win10)
Habe Testweise eine cmd-File gemacht, und da funktioniert es mit ShellExec.... Also leider wohl circa den Umweg mit einer CMD machen... Liegt evtl an den Benutzer/Computerrichtlinien...
|
|
|
| |
|
|
|
Michael W. | Da hat ByteAttack mal wieder recht. aus TechNet
Dsquery
Letzte Aktualisierung: Dezember 2007
Betrifft: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2008, Windows Server 2008 R2
Queries the directory by using search criteria that you specify. Each of the dsquery commands finds objects of a specific object type, with the exception of dsquery *, which can query for any type of object
Dsquery is a command-line tool that is built into Windows Server 2008. It is available if you have the Active Directory Domain Services (AD DS) server role installed. To use dsquery, you must run the dsquery command from an elevated command prompt. To open an elevated command prompt, click Start, right-click Command Prompt, and then click Run as administrator.
|
|
|
| |
|
|