EXE File kopieëren op alle schijven

Status
Niet open voor verdere reacties.

woellie123

Gebruiker
Lid geworden
9 jul 2010
Berichten
223
Hallo,
Ik ben bezig met een programmatje en nu moet ie een file uit de resources (.EXE) kopieëren op elke schijf die op de computer is aangesloten.
Ik heb het al geprobeerd met een optie om alle schijven op te zoeken en daar het op te kopieëren maar dat lukt niet...
Zie code:
Code:
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
        HardDrives()


    End Sub

    Private Sub HardDrives()
        Dim allDrives() As DriveInfo = DriveInfo.GetDrives
        Dim d As DriveInfo

        For Each d In allDrives
            My.Computer.FileSystem.CopyFile(NaamEXEFile.exe, allDrives)
        Next
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ProgressBar1.Increment(1)
        If ProgressBar1.Value = 100 Then
            Timer1.Stop()            
            Me.Close()
        End If
    End Sub
End Class

Maar dan krijg ik een error bij
Code:
My.Computer.FileSystem.CopyFile(NaamEXEFile.exe, allDrives)
Als error staat er: 'exe' is not a member of system.array

Heeft iemand een oplossing?
Alvast bedankt :)
Gr. Woellie123
 
[CPP]My.Computer.FileSystem.CopyFile(NaamEXEFile &".exe", d)[/CPP]

@dnties: Klopt inderdaad :)
 
Laatst bewerkt:
Zal in ieder geval:
For Each d In allDrives
My.Computer.FileSystem.CopyFile(NaamEXEFile.exe, d)
Next
moeten zijn.

Wellicht de oplossing voor je probleem, ook! :)

Tijs.
 
Hallo,
Bedankt voor jullie reacties, maar helaas werkt het niet :confused:
Het blijft dezelfde error...
 
Het zal er ongeveer zo uit moeten zien:

[cpp]Private Sub HardDrives()
Dim allDrives() As DriveInfo = DriveInfo.GetDrives
Dim d As DriveInfo
For Each d In allDrives
My.Computer.FileSystem.CopyFile("C:\Test.exe", d.RootDirectory.ToString & "\Test.exe")
Next
End Sub[/cpp]
 
@JoZ1 , bedankt voor je reactie het werkt, maar hij moet een file uit de resources kopieëren, en als ik de C:\Test.exe verander met de file uit de recources krijg ik weer een error...
Is dan aan te passen?
 
@MartinJM
M'n code (met die van JoZ1) ziet er zo uit:
Code:
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
        HardDrives()


    End Sub

    Private Sub HardDrives()
        Dim allDrives() As DriveInfo = DriveInfo.GetDrives
        Dim d As DriveInfo
        For Each d In allDrives
            My.Computer.FileSystem.CopyFile("C:\Test.exe", d.RootDirectory.ToString & "\Test.exe")
        Next
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ProgressBar1.Increment(1)
        If ProgressBar1.Value = 100 Then
            Timer1.Stop()
            Me.Close()
        End If
    End Sub
End Class
Maar ik wil graag dat ie i.p.v. My.Computer.FileSystem.CopyFile("C:\Test.exe", d.RootDirectory.ToString & "\Test.exe") een file uit de resources kopieërt...
 
Wat je kan doen is dit:

In de solution explorer staat een mapje "Resources". Als je dat openklikt dan zie je je resources. Klik dan op degene die je wilt kopiëren en kijk bij properties. Daar zie je dan staan: "Copy to output dir". De value staat op: "Dot not copy".

Verander dat naar "Copy always".

Dan kan je daarna deze code gebruiken:
Code:
My.Computer.FileSystem.CopyFile(Application.StartupPath & "\resources\Test.exe", d.RootDirectory.ToString & "\Test.exe")


Het kan zijn dat je dat stukje code nog een beetje aan moet passen, maar bij mij werkte het zo. Succes!:thumb:


PS: Dan is het wel zo dat iedereen het kan zien voordat je het hebt gekopiëerd.
 
@MartinJM bedankt voor de code, maar nu krijg ik als ik het programma debug de error dat hij C:\Documents and Settings\pc\Bureaublad\Test.exe niet kan vinden...
Ik gebruik win 7 om het progje te maken, en heb het in virtualbox met windows XP uitgeprobeerd, en daar werkt het dus niet (in win 7 trouwens ook niet...)
Iemand een idee?
Gr. Woellie123
 
Toen ik die code gebruikte, werkte hij wel (win7)....

Heb je er iets aan veranderd, en zo ja, wat heb je dan veranderd???



*EDIT*
Wat anders misschien makkelijker zou zijn, is om het bestandje gewoon mee te installeren met een installer en dat dan te kopiëren...
 
Laatst bewerkt:
Schrijf naar het pad met System.IO.File.WriteAllBytes.

PHP:
Imports System.IO

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
        For Each Drive As DriveInfo In DriveInfo.GetDrives()
            File.WriteAllBytes(Drive.RootDirectory.ToString() & "Test.exe", My.Resources.ResourceNaam)
        Next
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ProgressBar1.Increment(1)
        If ProgressBar1.Value = 100 Then
            Timer1.Stop()
            Me.Close()
        End If
    End Sub
End Class
 
@CaptainBri , Bedankt het werkt :)
Maar nog 1 probleem: hij zegt dat het pad D:\ (DVD speler) geweigerd is. Hoe kan ik het zó oplossen dat er dan gewoon niks gebeurd en naar de volgende schijf gaat?
Alvast Bedankt :)

Gr. Woellie123
 
Met een try-catch blok:
PHP:
Imports System.IO
 
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
        For Each Drive As DriveInfo In DriveInfo.GetDrives()
            Try
            File.WriteAllBytes(Drive.RootDirectory.ToString() & "Test.exe", My.Resources.ResourceNaam)
            Catch
            End Try
        Next
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ProgressBar1.Increment(1)
        If ProgressBar1.Value = 100 Then
            Timer1.Stop()
            Me.Close()
        End If
    End Sub
End Class

Veel plezier ermee :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan