Tervehdys,
Rakentelen ohjelmaa, joka kopioi tiedostoja domainista toiseen. Ohjelma toimii nyt siten, että ohjelma käynnistää net.exe prosessin, jolle argumentteina annetaan halutut kohdepalvelimet ja niiden autentikointii tarvittavat tiedot. Itse kopiointi suoritetaan file.copy -metodilla. Lopuksi käynnistetään uusi prosessi net.exe:lle, joka deletoi jaon.
Tämä toimii noin pääsääntöisesti ihan hyvin, mutta mielestäni tämä ei ole oikea/ paras tapa ratkaista asia. Kun net.exe käynnistetään, niin en osaa ottaa mitään palautetta siltä vastaan. Välillä komennon suorittaminen epäonnistuu, ja sitten vika ilmenee vasta kopioinnissa.
Välillä taas delete epäonnistuu, joka sitten taas aiheuttaa turhia avoimia yhteyksiä.
Koitin googletella parempia ratkaisuja, mutta niitä ei tuntunut löytyvän. Pitkälti löydetyt ratkaisut oli tehty samalla tavalla kuin minun.
Heippa K_L!
parhaasta ratkaisusta en tiedä...mutta et copy/pastettaisi tänne koodiasi..?
Imports System
Imports System.IO
Imports Microsoft.VisualBasic
Public Class Form1
'...
Sub AliOhjelma(ByVal FileName As String)
Dim getInfo As System.IO.DriveInfo()
getInfo = System.IO.DriveInfo.GetDrives
Dim DriveArray(0) As String
Dim cnt As Integer = -1
For Each info As System.IO.DriveInfo In getInfo
cnt += 1
Redim Preserve DriveArray(cnt)
DriveArray(cnt) = info.name
Next
Try
Kill("C:\Net_Session.bat")
Catch ex As Exception
End Try
Try
Kill("C:\ready.txt")
Catch ex As Exception
End Try
FileOpen(1,"C:\Net_Session.bat", _
OpenMode.Output, OpenAccess.Write)
PrintLine(1,"@echo off")
PrintLine(1,"NET SESSION DELETE")
PrintLine(1,"NET USE " + Chr(34) + "\\kone" _
+ Chr(34) + "\resurssi\asema pwd")
PrintLine(1,"NET USE " + Chr(34) + "\\kone" _
+ Chr(34) + "\resurssi\asema pwd")
PrintLine(1,"NET USE " + Chr(34) + "\\kone" _
+ Chr(34) + "\resurssi\asema pwd")
Rem jne...
PrintLine(1,"echo ready >C:\ready.txt")
PrintLine(1,"Exit")
FileClose(1)
Do While Dir("C:\Net_Session.bat") = ""
Application.DoEvents
Loop
Shell("C:\Net_Session.bat", AppWinStyle.Hide)
Do While Dir("C:\ready.txt") = ""
Application.DoEvents
Loop
getInfo = System.IO.DriveInfo.GetDrives
Dim DriveArray2(0) As String
cnt = -1
For Each info As System.IO.DriveInfo In getInfo
cnt += 1
Redim Preserve DriveArray2(cnt)
DriveArray2(cnt) = info.name
Next
If DriveArray.Length < DriveArray2.Length Then
For i As Integer = 0 To DriveArray2.GetUpperBound(0)
Dim IsLocal As Boolean = False
For j As Integer = 0 To DriveArray.GetUpperBound(0)
If DriveArray(j) = DriveArray2(i) Then
IsLocal = True: Exit For
End If
Next j
If Not IsLocal Then
Try
FileCopy(FileName, DriveArray2(i) + "\" + FileName)
Do While Dir(DriveArray2(i) + "\" + FileName) = ""
Application.DoEvents
Loop
Catch ex As Exeption
End Try
'jne...
End If
Next i
Else
msgbox("Ei yhdistettyjä verkkoasemia...")
End If
End Sub
End ClassHeippa taas K_L!
toinen vaihtoehto on käyttää WNetAddConnection2 API'a
Heippa taas K_L!
eipä tietenkään kahta ilman kolmatta...
Option Strict Off
Imports System.IO
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class Form1
Friend WithEvents objNetWork As Object = _
CreateObject("Wscript.Network")
'...
Private Sub Form1_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Dim asema As String = "X:"
Dim jako As String = "\\Kone\JakoNimi"
Dim tunnus As String = "tunnus"
Dim passu As String = "passu"
Select Case Connect(asema, jako, _
"FALSE", tunnus, passu).Length
Case Is > 0
Dim filu As String = "testi.txt"
FileCopy(filu, asema + "\" + filu)
Do While Dir(asema + "\" + filu) = ""
Application.DoEvents
Loop
MsgBox(Disconnect(asema))
Case Is = 0
MsgBox("Verkkoasemaan yhdistäminen resurssista " _
+ jako + " ei onnistunut")
End Select
End Sub
Function Connect(ByVal asema As String, _
ByVal jako As String, ByVal pysyvä As String, _
ByVal tunnus As String, ByVal passu As String) As String
Try
objNetWork.MapNetworkDrive(asema, jako, pysyvä, tunnus, passu)
Catch ex As Exception
Return String.Empty
Exit Function
End Try
Return "Toimii!"
End Function
Function Disconnect(ByVal asema As String) As String
Try
objNetwork.RemoveNetworkDrive(asema)
Catch ex As Exception
Return "Yhteyden katkaisu ei onnistunut"
Exit Function
End Try
Return "Yhteyden katkaisu onnistui"
End Function
End ClassTerve,
Kiitoksia kolmesti.
Tuo ensimmäinen ratkasu on lähellä ideaa joka minulla oli, mutta paljon paremmin toteutettu. Tämä viimeinen on juuri se, mitä minulla oli mielessä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.