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 Class
Heippa 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 Class
Terve,
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.