Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB.NET] percorso valido per WScript.Shell

    Ciao,
    starei cercando di far aprire un file in SolidEdge (un cad) da una WinForm ma mi sembra di capire che WScript.Shell cerca i percorsi in stile DOS
    (C:\Docume~1 al posto di Documents and Settings )

    Questo è il percorso base dei disegni:
    codice:
    Public Shared percorsoBase As String = My.Application.Info.DirectoryPath & "\Disegni\"

    Il pulsante 'Sfoglia':
    codice:
        Private Sub btnSfoglia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSfoglia.Click
            Dim MyDialog As New OpenFileDialog()
            If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                Dim clearPath As String = MyDialog.FileName.Substring(Len(percorsoBase) + 2)
                tbDisegno.Text = clearPath
            End If 
        End Sub
    Il pulsante 'Apri':
    codice:
        Private Sub btnApri_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApri.Click
            If My.Computer.FileSystem.FileExists(percorsoBase & tbDisegno.Text) Then
                Dim wsh As Object
                wsh = CreateObject("WScript.Shell")
                wsh.run(percorsoBase & tbDisegno.Text)
                wsh = Nothing
            Else
                MsgBox("File non trovato: " & percorsoBase & tbDisegno.Text)
            End If
        End Sub
    La procedura si rende conto che il file esiste ma non riesce ad aprirlo , da questo ho supposto che WScript.Shell, probabilmente, legge i percorsi alla vecchia maniera

    Non credo sia possibile ricostruire il percorso 'vecchio stile' in modo che funzioni su tutte le macchine, visto che il suffisso numerico che il sistema appende al nome di cartella troncato varia a seconda delle altre cartelle presenti nella medesima posizione del disco.

    Qualcuno saprebbe indicarmi come mettere a posto questa procedurina o, eventualmente, un'altra tecnica per aprire un file col suo eseguibile?

    N.B. Questo programmino girerà solo su sistemi interni che hanno SolidEdge installato e su cui basta fare doppio click su un disegno per aprirlo (associazione di files di Windows già a posto)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova ad aggiungere le

    "

    al percorso

  3. #3
    Scusa, non ridere ma non capisco dove aggiungere le virgolette.

    Il FileExist() mi restituisce True, questo dovrebbe indicare che il percorso è corretto.

    Il 'percorso+nomeDelFile' che passo alla shell è una semplice concatenazione di due variabili e non saprei proprio dove schiaffargli le virgolette senza che generino un'errore di 'costante stringa senza terminazione"


    Ho provato solo un patetico:
    codice:
    wsh.run("" & percorsoBase & tbDisegno.Text & "")
    senza risultati




    *Editato perchè avevo sbagliato il nome della TextBox

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa, non ridere ma non capisco dove aggiungere le virgolette.
    No problem ... ... forse non sono stato chiarissimo ...

    Prova ad utilizzare 4 (sì quattro) virgolette doppie ai lati ...

    codice:
    wsh.run("""" & percorsoBase & tbItaliano.Text & """")

  5. #5
    Originariamente inviato da oregon
    Prova ad aggiungere le

    "

    al percorso
    Sì, in effetti questa è quella che io chiamo una """"superCazzola informatica""""
    (vedi film: Amici miei)

    Grazie 1000!!! Ora funziona perfettamente!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Molto probabilmente, quando MItaly si colleghera', ti consigliera' di non usare la Shell di Wscript ma la classe Process propria di .NET e della programmazione OOP ...

    Avresti potuto quindi scrivere

    Dim proc As New Process

    proc.StartInfo.FileName = percorsoBase & tbItaliano.Text
    proc.Start()
    senza problemi ...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    <messaggio doppio>

  8. #8
    Visto che avevo 'depistato' con la storia dei percorsi vecchio stile (con la tilde ~) posto il codice completo e funzionante:
    codice:
        Public Shared percorsoBase As String = My.Application.Info.DirectoryPath & "\Disegni\"
    
        Private Sub btnSfoglia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSfoglia.Click
            Dim MyDialog As New OpenFileDialog()
            If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                Dim clearPath As String = MyDialog.FileName.Substring(Len(percorsoBase))
                tbDisegno.Text = clearPath
            End If 
        End Sub
    
        Private Sub btnApri_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApri.Click
            If My.Computer.FileSystem.FileExists(percorsoBase & tbDisegno.Text) Then
                Dim wsh As Object
                wsh = CreateObject("WScript.Shell")
                wsh.run("""" & percorsoBase & tbDisegno.Text & """")
                wsh = Nothing
            Else
                MsgBox("File non trovato: " & percorsoBase & tbDisegno.Text)
            End If
        End Sub

    Ora provo anche la tecnica che mi avrebbe consigliato MItaly
    Faticavo a trovare qualcosa in google e il motore di ricerca di questo forum ogni tanto s'impalla con certi termini ...come, appunto, se si prova a cercare "WScript.Shell".
    Grazie ancora per i chiarimenti!

  9. #9
    Ok, ultimo messaggio e poi mi ammutolisco e torno al lavoro.

    codice:
    Dim proc As New Process
    proc.StartInfo.FileName = percorsoBase & tbDisegno.Text 
    proc.Start()
    Anche questa tecnica funziona alla perfezione e visto che è propria di .NET è, sicuramente, da preferirsi ...infatti adotterò questa.

    Di nuovo grazie, anche a chi ha partecipato in maniera involontaria , e alla prossima

  10. #10
    Non usare WScript che serve - appunto - per gli script, ma le apposite classi del...
    Originariamente inviato da oregon
    Molto probabilmente, quando MItaly si colleghera', ti consigliera' di non usare la Shell di Wscript ma la classe Process propria di .NET e della programmazione OOP ...
    ... sto diventando troppo prevedibile...
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.