أفضل طريقة لف رسينك التقدم في gui ؟
-
08-06-2019 - |
سؤال
يمكنني استخدام رسينك لمزامنة الملفات على عملاء Windows في خادم الملحد الطريق.ما هي الوسائل المتاحة لإرسال تقدم رسينك إلى الوالد عملية العرض في واجهة المستخدم الرسومية تقدم الحانة ؟
أتصور اثنين أو ثلاثة خيارات موجودة.(1) مشاهدة المعياري (2) مشاهدة rsync.exe ملف سجل شبيه يونكس tail
(3) مشاهدة رسينك وحدة الإخراج في الذاكرة.
واحد الذي هو أفضل/المفضل ؟
المحلول
لهذا النوع من المهام ، يمكنني استخدام بلدي AutoIt السيناريو (مجانية, ويندوز فقط).السيناريو توجيه الإخراج القياسي في الرسومية نافذة عرض مع القدرة على التمرير مرة أخرى ، الخ (مفيدة جدا في عمليات طويلة مثل XCOPYs / PKZIPs للتحقق مما إذا كان أي خطأ لم يحدث).
يمكنني استخدام AutoIt لأنه حر ، من السهل جدا للاستخدام, و يمكن تجميع بسرعة إلى .EXE.أعتقد أنه بديل ممتاز كاملة لغة البرمجة لهذا النوع من المهام.الجانب السلبي هو أن يفعل ويندوز فقط.
$sCmd = "DIR E:\*.AU3 /S" ; Test command
$nAutoTimeout = 10 ; Time in seconds to close window after finish
$nDeskPct = 60 ; % of desktop size (if percent)
; $nHeight = 480 ; height/width of the main window (if fixed)
; $nWidth = 480
$sTitRun = "Executing process. Wait...." ;
$sTitDone = "Process done" ;
$sSound = @WindowsDir & "\Media\Ding.wav" ; End Sound
$sButRun = "Cancel" ; Caption of "Exec" button
$sButDone = "Close" ; Caption of "Close" button
#include <GUIConstants.au3>
#include <Constants.au3>
#Include <GuiList.au3>
Opt("GUIOnEventMode", 1)
if $nDeskPct > 0 Then
$nHeight = @DesktopHeight * ($nDeskPct / 100)
$nWidth = @DesktopWidth * ($nDeskPct / 100)
EndIf
If $CmdLine[0] > 0 Then
$sCmd = ""
For $nCmd = 1 To $CmdLine[0]
$sCmd = $sCmd & " " & $CmdLine[$nCmd]
Next
; MsgBox (1,"",$sCmd)
EndIf
; AutoItSetOption("GUIDataSeparatorChar", Chr(13)+Chr(10))
$nForm = GUICreate($sTitRun, $nWidth, $nHeight)
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseForm")
$nList = GUICtrlCreateList ("", 10, 10, $nWidth - 20, $nHeight - 50, $WS_BORDER + $WS_VSCROLL)
GUICtrlSetFont (-1, 9, 0, 0, "Courier New")
$nClose = GUICtrlCreateButton ($sButRun, $nWidth - 100, $nHeight - 40, 80, 30)
GUICtrlSetOnEvent (-1, "CloseForm")
GUISetState(@SW_SHOW) ;, $nForm)
$nPID = Run(@ComSpec & " /C " & $sCmd, ".", @SW_HIDE, $STDOUT_CHILD)
; $nPID = Run(@ComSpec & " /C _RunErrl.bat " & $sCmd, ".", @SW_HIDE, $STDOUT_CHILD) ; # Con ésto devuelve el errorlevel en _ERRL.TMP
While 1
$sLine = StdoutRead($nPID)
If @error Then ExitLoop
If StringLen ($sLine) > 0 then
$sLine = StringReplace ($sLine, Chr(13), "|")
$sLine = StringReplace ($sLine, Chr(10), "")
if StringLeft($sLine, 1)="|" Then
$sLine = " " & $sLine
endif
GUICtrlSetData ($nList, $sLine)
_GUICtrlListSelectIndex ($nList, _GUICtrlListCount ($nList) - 1)
EndIf
Wend
$sLine = " ||"
GUICtrlSetData ($nList, $sLine)
_GUICtrlListSelectIndex ($nList, _GUICtrlListCount ($nList) - 1)
GUICtrlSetData ($nClose, $sButDone)
WinSetTitle ($sTitRun, "", $sTitDone)
If $sSound <> "" Then
SoundPlay ($sSound)
EndIf
$rInfo = DllStructCreate("uint;dword") ; # LASTINPUTINFO
DllStructSetData($rInfo, 1, DllStructGetSize($rInfo));
DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($rInfo))
$nLastInput = DllStructGetData($rInfo, 2)
$nTime = TimerInit()
While 1
If $nAutoTimeout > 0 Then
DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($rInfo))
If DllStructGetData($rInfo, 2) <> $nLastInput Then
; Tocó una tecla
$nAutoTimeout = 0
EndIf
EndIf
If $nAutoTimeout > 0 And TimerDiff ($nTime) > $nAutoTimeOut * 1000 Then
ExitLoop
EndIf
Sleep (100)
Wend
Func CloseForm()
Exit
EndFunc
نصائح أخرى
.صافي لديه جميلة على التوالي إلى الأمام لقراءة ومشاهدة المعياري.
أعتقد أن هذا سيكون أنظف ، نظرا إلى أنه لا يعتمد على أي ملفات خارجية فقط الطريق إلى رسينك.أنا لن يفاجأ أيضا إذا كان هناك مجمع المكتبة هناك إما.إذا كان لا يكتب ولا مفتوحة المصدر ذلك :)
لقد بنيت بلدي كائن بسيط لهذا, أنا أحصل على الكثير من إعادة استخدامها من ذلك, أستطيع أن التفاف عليه مع cmdline
, web page
, webservice
, كتابة الإخراج إلى ملف ، الخ---
وقد علق تحتوي على بعض العناصر rsync
أمثلة--
ما أود القيام به في وقت ما هو تضمين rsync
(و cygwin
) في مورد وجعل واحدة .صافي قابل للتنفيذ منه ...
تفضل:
Imports System.IO
Namespace cds
Public Class proc
Public _cmdString As String
Public _workingDir As String
Public _arg As String
Public Function basic() As String
Dim sOut As String = ""
Try
'Set start information.
'Dim startinfo As New ProcessStartInfo("C:\Program Files\cwRsync\bin\rsync", "-avzrbP 192.168.42.6::cdsERP /cygdrive/s/cdsERP_rsync/gwy")
'Dim startinfo As New ProcessStartInfo("C:\Program Files\cwRsync\bin\rsync", "-avzrbP 10.1.1.6::user /cygdrive/s/cdsERP_rsync/gws/user")
'Dim startinfo As New ProcessStartInfo("C:\windows\system32\cscript", "//NoLogo c:\windows\system32\prnmngr.vbs -l")
Dim si As New ProcessStartInfo(_cmdString, _arg)
si.UseShellExecute = False
si.CreateNoWindow = True
si.RedirectStandardOutput = True
si.RedirectStandardError = True
si.WorkingDirectory = _workingDir
' Make the process and set its start information.
Dim p As New Process()
p.StartInfo = si
' Start the process.
p.Start()
' Attach to stdout and stderr.
Dim stdout As StreamReader = p.StandardOutput()
Dim stderr As StreamReader = p.StandardError()
sOut = stdout.ReadToEnd() & ControlChars.NewLine & stderr.ReadToEnd()
'Dim writer As New StreamWriter("out.txt", FileMode.CreateNew)
'writer.Write(sOut)
'writer.Close()
stdout.Close()
stderr.Close()
p.Close()
Catch ex As Exception
sOut = ex.Message
End Try
Return sOut
End Function
End Class
End Namespace
تحقق من DeltaCopy.بل هو ويندوز واجهة المستخدم الرسومية على رسينك.
تحقق NAsBackup مفتوحة المصدر البرمجيات التي تعطي مستخدم Windows رسينك واجهة المستخدم الرسومية باستخدام مشاهدة المعياري.