مساعده في Visual Basic 2010
banner
2020-12-03 , 04:12 مساءً
MTMLL’s Avatar
MTMLL

مشارك

المشاركات:488
التسجيل:Feb 2010
MTMLL
السلام عليكم اخواني انا مبتدا في عالم البرمجه

صممت لي برنامج بسيط تنفيذي

فتح برنامج - تنفيذ ملف دفعي - وخروج - وحفظ العمل
كامثال للفكره

Image

البرنامج يعتمد على تنفيذ ملفات دفعيه وملقات EXE جاهزه

استفساري

مسار الملفات مثلا بالكود

D:\PRO\1.bat



[CODE]


Dim OPEN As New ProcessStartInfo("D:\PRO\1.bat")
OPEN.RedirectStandardError = True
OPEN.RedirectStandardOutput = True
OPEN.CreateNoWindow = True
OPEN.WindowStyle = ProcessWindowStyle.Hidden
OPEN.UseShellExecute = False

Dim process As Process = process.Start(OPEN)
process.WaitForExit()
MessageBox.Show("OPEN ")

[/CODE]

ولما اقوم بتشغيله على جهاز اخر بعد عمل BUILD
لايعمل ويظهر خطا نيت فريمورك
اعتقد بسبب مسار الملف
ماهي الطريق الصحيحه في ارفاق الملف مع البرنامج للعمل على اجهزه اخرى

للعلم الملف لا اريده بملف تنصيب اريد فقط تطبيق exe

مباشره يعمل
Enlarged Image
2020-12-03 , 04:12 مساءً
2020-12-04 , 05:28 صباحاً
iSR5’s Avatar
iSR5

Laptop Support Team

المشاركات:3378
التسجيل:Jul 2016
iSR5
MTMLL كتب:
السلام عليكم اخواني انا مبتدا في عالم البرمجه

صممت لي برنامج بسيط تنفيذي

فتح برنامج - تنفيذ ملف دفعي - وخروج - وحفظ العمل
كامثال للفكره

Image

البرنامج يعتمد على تنفيذ ملفات دفعيه وملقات EXE جاهزه

استفساري

مسار الملفات مثلا بالكود

D:\PRO\1.bat



[CODE]


Dim OPEN As New ProcessStartInfo("D:\PRO\1.bat")
OPEN.RedirectStandardError = True
OPEN.RedirectStandardOutput = True
OPEN.CreateNoWindow = True
OPEN.WindowStyle = ProcessWindowStyle.Hidden
OPEN.UseShellExecute = False

Dim process As Process = process.Start(OPEN)
process.WaitForExit()
MessageBox.Show("OPEN ")

[/CODE]

ولما اقوم بتشغيله على جهاز اخر بعد عمل BUILD
لايعمل ويظهر خطا نيت فريمورك
اعتقد بسبب مسار الملف
ماهي الطريق الصحيحه في ارفاق الملف مع البرنامج للعمل على اجهزه اخرى

للعلم الملف لا اريده بملف تنصيب اريد فقط تطبيق exe

مباشره يعمل


لابد تستخدم ال Environment Path حتى يقدر البرنامج يعرف المسار الحالي اللي اشتغل عليه ومن خلاله يمشي على المسار اللي المفترض تكون الملفات فيه !

يعني مثلاً ممكن تعمل لك فولدر خاص لل exe تمام .. وبعدها تجمع كل الباتشز في فولدر داخل هذا الملف لنفترض اننا بنسميه batches .. بعدها تعمل كذا :



[CODE]Dim currentPath As String = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
Dim fullBatchPath As String = System.IO.Path.Combine(currentPath, "PRO\1.bat")
Dim OPEN As New ProcessStartInfo(fullBatchPath)
[/CODE]

واذا عندك مثلاً اكثر من باتش .. ممكن تعمل ميثود تمرر فيها الباث كامل للباتش وتشغلها مثل كذا :

[CODE]Public Shared Sub ExecuteBatch(ByVal path As String)
Dim open As ProcessStartInfo = New ProcessStartInfo(path) With {
.RedirectStandardError = True,
.RedirectStandardOutput = True,
.CreateNoWindow = True,
.WindowStyle = ProcessWindowStyle.Hidden,
.UseShellExecute = False
}
Dim process As Process = process.Start(open)
End Sub
[/CODE]

بعدها تقدر تستدعيها بهالطريقة :
[CODE] Dim BatchFolderName As String = "batches "
Dim CurrentPath As String = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
Dim BatchFolderPath As String = System.IO.Path.Combine(currentPath, "batches ")
Dim batches = Directory.GetFiles(BatchFolderPath, "*.bat")

If batches.Length > 0 Then

For Each batch In batches
ExecuteBatch(batch)
Next
End If[/CODE]
2020-12-04 , 05:28 صباحاً
2020-12-09 , 04:30 صباحاً
المفضل’s Avatar
المفضل

GNU/Linux

المشاركات:6429
التسجيل:Jan 2007
المفضل
افضل ان تضع كود bat داخل برنامجك بدل من استدعاء ملف ثم تشغيله

2020-12-09 , 04:30 صباحاً
2020-12-11 , 06:47 مساءً
MTMLL’s Avatar
MTMLL

مشارك

المشاركات:488
التسجيل:Feb 2010
MTMLL
iSR5 كتب:
لابد تستخدم ال Environment Path حتى يقدر البرنامج يعرف المسار الحالي اللي اشتغل عليه ومن خلاله يمشي على المسار اللي المفترض تكون الملفات فيه !

يعني مثلاً ممكن تعمل لك فولدر خاص لل exe تمام .. وبعدها تجمع كل الباتشز في فولدر داخل هذا الملف لنفترض اننا بنسميه batches .. بعدها تعمل كذا :



[CODE]Dim currentPath As String = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
Dim fullBatchPath As String = System.IO.Path.Combine(currentPath, "PRO\1.bat")
Dim OPEN As New ProcessStartInfo(fullBatchPath)
[/CODE]

واذا عندك مثلاً اكثر من باتش .. ممكن تعمل ميثود تمرر فيها الباث كامل للباتش وتشغلها مثل كذا :

[CODE]Public Shared Sub ExecuteBatch(ByVal path As String)
Dim open As ProcessStartInfo = New ProcessStartInfo(path) With {
.RedirectStandardError = True,
.RedirectStandardOutput = True,
.CreateNoWindow = True,
.WindowStyle = ProcessWindowStyle.Hidden,
.UseShellExecute = False
}
Dim process As Process = process.Start(open)
End Sub
[/CODE]

بعدها تقدر تستدعيها بهالطريقة :
[CODE] Dim BatchFolderName As String = "batches "
Dim CurrentPath As String = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
Dim BatchFolderPath As String = System.IO.Path.Combine(currentPath, "batches ")
Dim batches = Directory.GetFiles(BatchFolderPath, "*.bat")

If batches.Length > 0 Then

For Each batch In batches
ExecuteBatch(batch)
Next
End If[/CODE]



جميل زادك الله علما



المفضل كتب:
افضل ان تضع كود bat داخل برنامجك بدل من استدعاء ملف ثم تشغيله



ياليت تعطينا افضل طريقه خاصه ان ملف البات الكود المكتوب فيه فيه تقريبا 70 سطر
2020-12-11 , 06:47 مساءً
2021-03-16 , 02:17 مساءً
Alshalawy’s Avatar
Alshalawy

مشارك

المشاركات:316
التسجيل:May 2011
Alshalawy
ممكن تعمل في مكان عام او مجلد معروف مثل

%windir%
او تستخدم

SET skullpath=%CD%
SET skullpath=%skullpath:\=\\%
2021-03-16 , 02:17 مساءً