Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: **Aincrad** en 12 Septiembre 2017, 15:40 pm



Título: ayuda en VB.NET
Publicado por: **Aincrad** en 12 Septiembre 2017, 15:40 pm
hola a todos los del foro.

necesito ayuda con parte de un code programado en visual studio 2008

code:

Código
  1. Try
  2.           For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
  3.                                    "C:\Users\andres\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup", _
  4.                                    FileIO.SearchOption.SearchAllSubDirectories, _
  5.                                    "*.vbs", _
  6.                                    "*.dll", _
  7.                                    "*.cmd", _
  8.                                    "*.wsf", _
  9.                                    "*.exe", _
  10.                                    "*.ink", _
  11.                                    "*.js", _
  12.                                    "*.html", _
  13.                                    "*.vbe")
  14.  
  15.                ListBox1.Items.Add(Archivo)
  16.                Form7.Show()
  17.            Next
  18.            ' errores  
  19.        Catch oe As Exception
  20.            MsgBox(oe.Message, MsgBoxStyle.Critical)
  21.        End Try
  22.  


lo que necesito es que el directorio en la linea 3 del code
cambie el usuario andres por algo como %USERPROFILE% de batch, para que
funcione en otras computadoras.
es porque si quiero correr el code en otra PC que tiene otro usuario funcione.


Los códigos de .NET van en el subforo de .NET


Título: Re: ayuda en VB.NET
Publicado por: Eleкtro en 12 Septiembre 2017, 16:31 pm
Hola. Puedes usar la función Environment.GetFolderPath() junto a la enumeración Environment.SpecialFolder:

Código
  1. ' C:\Users\{Usuario}
  2. Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))

Código
  1. ' C:\Users\{Usuario}\AppData\Roaming
  2. Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))

Código
  1. ' C:\Users\{Usuario}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  2. Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Startup))

Además también puedes expandir el valor de cualquier variable de entorno que esté definida en el sistema operativo:

Código
  1. ' C:\Users\{Usuario}
  2. Dim dirPath As String = Environment.ExpandEnvironmentVariables("%UserProfile%")

Código
  1. ' C:\Users\{Usuario}\AppData\Roaming
  2. Dim dirPath As String = Environment.ExpandEnvironmentVariables("%AppData%")

Código
  1. ' C:\Users\{Usuario}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  2. Dim dirPath As String = Environment.ExpandEnvironmentVariables("%AppData%\Microsoft\Windows\Start Menu\Programs\Startup")



Con respecto al código que has mostrado:

1. El caracter guión bajo ("_") de linebreak es innecesario escribirlo en versiones actuales de VB.NET. Solo consigue afear el código fuente.

2. Por cuestiones de rendimiento y velocidad de respuesta de la UI, te sugiero sustituir la llamada al método ListBox.Items.Add() por: ListBox.BeginUpdate() + ListBox.Items.AddRange()  + ListBox.EndUpdate(), en ese orden.

3.
Citar
Código
  1. Form7.Show()
en cada iteración del búcle estás llamando al método para mostrar ese form... probablemente eso no sea lo que realmente pretendías hacer.

Saludos.


Título: Re: ayuda en VB.NET
Publicado por: **Aincrad** en 12 Septiembre 2017, 17:03 pm
gracias electro yo estaba intentando con un codigo similar

Código
  1. (Environment.GetFolderPath(Environment.SpecialFolder.Startup))

pero el boto no funcionaba ni lanzaba ningún error.

ahora probe tu code. lo puse de la siguiente manera

Código
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Dim dir As New Directory(Environment.GetFolderPath(Environment.SpecialFolder.Startup)) ' ME MARCA ERROR EN DIR
  3.        Try
  4.  
  5.            For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
  6.                                    dir, _                                          'ME MARCA ERROR EN DIR
  7.                                    FileIO.SearchOption.SearchAllSubDirectories, _
  8.                                    "*.vbs", _
  9.                                    "*.dll", _
  10.                                    "*.cmd", _
  11.                                    "*.wsf", _
  12.                                    "*.exe", _
  13.                                    "*.ink", _
  14.                                    "*.js", _
  15.                                    "*.html", _
  16.                                    "*.vbe")
  17.  
  18.                ListBox1.Items.AddRange(Archivo)
  19.            Next
  20.        Catch oe As Exception
  21.            MsgBox(oe.Message, MsgBoxStyle.Critical)
  22.        End Try
  23.    End Sub
  24.  

AHORA ME MARCAN DOS ERRORES

error en la linea 2 en la palabra dir:

Error   1   Type 'System.IO.Directory' has no constructors.   

error en la linea 6 en la palabra dir:

Error   2   Value of type 'System.IO.Directory' cannot be converted to 'String'.   



Título: Re: ayuda en VB.NET
Publicado por: Eleкtro en 12 Septiembre 2017, 17:34 pm

Código
  1. Dim dir As New Directory(...)

AHORA ME MARCAN DOS ERRORES

error en la linea 2 en la palabra dir:
Error   1   Type 'System.IO.Directory' has no constructors.   

error en la linea 6 en la palabra dir:
Error   2   Value of type 'System.IO.Directory' cannot be converted to 'String'.   

El código lo has copiado mal. Estoy usando la clase DirectoryInfo, no Directory. De todas formas no es necesario utilizar dicha clase (a menos que le vayas a sacar provecho), puedes declarar un String en su lugar ( Dim dirPath As String = Environment.GetFolderPath(...) ).

Si vas a usar la clase DirectoryInfo, entonces en la linea que he resaltado aquí abajo deberás hacer un cambio para usar la propiedad DirectoryInfo.FullName:
Código
  1.            For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
  2.                                    dir, _                                          'ME MARCA ERROR EN DIR
  3.                                    ...
  4.  
...puesto que 'dir' es un objeto (instancia de la clase DirectoryInfo), no es una variable String.

Saludos.


Título: Re: ayuda en VB.NET
Publicado por: **Aincrad** en 12 Septiembre 2017, 20:03 pm
  ;-)           Gracias Elektro me ayudaste. si me sirvió.         ;-)