elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  DUDA Ruta archivos en ejecución[SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: DUDA Ruta archivos en ejecución[SOLUCIONADO]  (Leído 6,032 veces)
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
DUDA Ruta archivos en ejecución[SOLUCIONADO]
« en: 5 Febrero 2014, 18:20 pm »

Buenas,

He estado buscando en internet y lo que encuentro no me sustenta mucho, ¿alguno de ustedes sabe como obtener la ruta de un archivo en ejecución, pero que NO esté dentro del mismo folder que viene el debug del visual studio y que no sea la misma aplicación del programa que uno está creando?.

En pocas palabras, necesito obtener la ruta de un archivo que se está ejecutando, pero que no sea la misma aplicación que uno está programando, es en C#.

He estado utilizando
este código

Código
  1.  
  2. string logsDirectory = Path.Combine(Environment.CurrentDirectory, trozo2);
  3.  
  4.  

Pero lo que obtengo es la ruta donde está proyecto y es lo que NO necesito.



« Última modificación: 5 Febrero 2014, 23:17 pm por Yaldabaot » En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: DUDA Ruta archivos en ejecución
« Respuesta #1 en: 5 Febrero 2014, 19:03 pm »

necesito obtener la ruta de un archivo que se está ejecutando

Supongo que por "un archivo que se está ejecutando" te referirás a un proceso en ejecución, de lo contrario explíca mejor.


Te hice un ejemplo (en VB.NET) usando LINQ.

PD:  La razón de porque devuelvo un Array es porque puede haber varias instancias abiertas de un programa multi-instancia con el mismo nombre pero desde distintos directorios (Ej: C:\Proceso.exe, C:\Carpeta\Proceso.exe )

Código
  1. Public Class Form1
  2.  
  3.    Private Shadows Sub Load() Handles MyBase.Load
  4.  
  5.        Dim ProcessPaths As String() = GetProcessPath("svchost.exe")
  6.  
  7.        For Each Path As String In ProcessPaths
  8.            MsgBox(Path )
  9.        Next
  10.  
  11.    End Sub
  12.  
  13.    ' Get Process Path
  14.    ' ( By Elektro )
  15.    '
  16.    ' Usage Examples:
  17.    ' MsgBox(GetProcessPath("notepad.exe").First)
  18.    '
  19.    ''' <summary>
  20.    ''' Gets the absolute path of a running process.
  21.    ''' </summary>
  22.    ''' <param name="ProcessName">Indicates the name of the process.</param>
  23.    ''' <returns>System.String[][].</returns>
  24.    Public Function GetProcessPath(ByVal ProcessName As String) As String()
  25.  
  26.        If ProcessName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase) Then
  27.            ProcessName = ProcessName.Remove(ProcessName.Length - 4)
  28.        End If
  29.  
  30.        Return (From p As Process In Process.GetProcesses
  31.                Where p.ProcessName.Equals(ProcessName, StringComparison.OrdinalIgnoreCase)
  32.                Select p.MainModule.FileName).ToArray
  33.  
  34.    End Function
  35.  
  36. End Class

Conversión instantanea a C#:

Código
  1. using Microsoft.VisualBasic;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Diagnostics;
  7. public class Form1
  8. {
  9.  
  10.  
  11. private new void Load()
  12. {
  13. string[] Processes = GetProcessPath("svchost.exe");
  14.  
  15. foreach (string path in Processes) {
  16. Interaction.MsgBox(path);
  17. }
  18.  
  19. }
  20.  
  21. // Get Process Path
  22. // ( By Elektro )
  23. //
  24. // Usage Examples:
  25. // MsgBox(GetProcessPath("notepad.exe").First)
  26. //
  27. /// <summary>
  28. /// Gets the absolute path of a running process.
  29. /// </summary>
  30. /// <param name="ProcessName">Indicates the name of the process.</param>
  31. /// <returns>System.String[][].</returns>
  32. public string[] GetProcessPath(string ProcessName)
  33. {
  34.  
  35. if (ProcessName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) {
  36. ProcessName = ProcessName.Remove(ProcessName.Length - 4);
  37. }
  38.  
  39. return (from p in Diagnostics.Process.GetProcesseswhere p.ProcessName.Equals(ProcessName, StringComparison.OrdinalIgnoreCase)p.MainModule.FileName).ToArray;
  40.  
  41. }
  42. public Form1()
  43. {
  44. Load += Load;
  45. }
  46.  
  47. }
  48.  
  49. //=======================================================
  50. //Service provided by Telerik (www.telerik.com)
  51. //Conversion powered by NRefactory.
  52. //Twitter: @telerik
  53. //Facebook: facebook.com/telerik
  54. //=======================================================
  55.  

Saludos


« Última modificación: 5 Febrero 2014, 19:27 pm por Eleкtro » En línea

Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: DUDA Ruta archivos en ejecución
« Respuesta #2 en: 5 Febrero 2014, 19:17 pm »

Voy a implementarlo y comentarte como me va, MUCHAS GRACIAS.
En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: DUDA Ruta archivos en ejecución
« Respuesta #3 en: 5 Febrero 2014, 22:14 pm »

Disculpa Elektro, no he podido implementarlo, me da una serie de errores.

Código
  1.  
  2. return (from p in Diagnostics.Process.GetProcesseswhere p.ProcessName.Equals(ProcessName, StringComparison.OrdinalIgnoreCase)p.MainModule.FileName).ToArray;
  3.  
  4.  

Y estos son los using que he estado usando

Código
  1.  
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Management;
  8. using System.Drawing.Printing;
  9. using System.Runtime.InteropServices;
  10. using System.Printing;
  11. using System.Configuration;
  12. using System.Collections;
  13. using System.Collections.Specialized;
  14. using System.Drawing;
  15. using System.Drawing.Imaging;
  16. using System.IO;
  17. using System.Diagnostics;
  18. using Microsoft.VisualBasic;
  19.  
  20.  

Errores tales como que no reconoce p, tambien con puntos y comas, no se si no estare poniendo alguna referencia.

« Última modificación: 5 Febrero 2014, 22:31 pm por Yaldabaot » En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: DUDA Ruta archivos en ejecución[SOLUCIONADO]
« Respuesta #4 en: 5 Febrero 2014, 23:15 pm »

Ya lo arreglé, muchas gracias por tu tiempo y paciencia Elektro.

Código
  1.  
  2. public string[] GetProcessPath(string ProcessName)
  3.        {
  4.  
  5.            if (ProcessName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
  6.            {
  7.                ProcessName = ProcessName.Remove(ProcessName.Length - 4);
  8.            }
  9.  
  10.  
  11.            return (from p in System.Diagnostics.Process.GetProcesses() where p.ProcessName.Equals(ProcessName, StringComparison.OrdinalIgnoreCase) select p.MainModule.FileName).ToArray();
  12.  
  13.            }
  14.  
  15.  

En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: DUDA Ruta archivos en ejecución[SOLUCIONADO]
« Respuesta #5 en: 6 Febrero 2014, 05:32 am »

si, parece que el conversor online se comío las clausulas ' Where' y 'Select' xD, no me di cuenta y tampoco testeé el código en C#.

Me alegro de que lo hayas solucionado.

saludos
En línea

Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: DUDA Ruta archivos en ejecución[SOLUCIONADO]
« Respuesta #6 en: 6 Febrero 2014, 23:52 pm »

Elektro, ¿ Hay alguna forma de hacerlo pero con un archivo abierto y no un proceso?.

Es decir yo tengo por ejemplo un txt sin guardar, ¿ Existe una forma de sacarle la ruta con sólo su nombre, tengo un evento que saca el nombre y me retorna por ejemplo Untitled Notepad, hay alguna forma?

He estado tratando de hacerlo con filewarcher, pero quedo igual porque necesito la ruta.
En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: DUDA Ruta archivos en ejecución[SOLUCIONADO]
« Respuesta #7 en: 7 Febrero 2014, 10:39 am »

Elektro, ¿ Hay alguna forma de hacerlo pero con un archivo abierto y no un proceso?.

No estoy muy seguro así que no puedo asegurar nada, pero dudo que exista una manera eficiente.

Si abres un archivo .TXT con un editor de texto y este editor de texto mantiene ocupado el archivo (en modo de lectura o escritura) segúramente puedas encontrar un Handle que haga referencia a ese archivo, de lo contario...pues no lo creo, ya que el archivo ya se cerró por el programa.

Y si abres un archivo con un programa puedes encontrar la referencia a ese archivo "abierto" usando WMI para buscar los parámetros commandline de los procesos en ejecución, por ejemplo, si Notepad fuese el editor predefinido en tu sistema y haces doble click en un archivo de texto entonces se iniciará el Notepad con estos parámetros:
Código:
Notepad.exe "Archivo abierto"
...y usando WMI podrás encontrar los parámetros de ese proceso para encontrar el archivo abierto.
Pero si desde esa mimsa instancia del programa abres otro(s) archivo(s) entonces óbviamente buscar los parámetros de la aplicación no te va a servir de nada porque el programa ya está iniciado y el nuevo archivo lo has abierto desde el programa.

Y si lo que quieres es monitorear la ejecución de un archivo, en tiempo real, pues... lo tienes dificil, un 'FileSystemWatcher' solo te va a informar de los cambios una vez se hayan realizado, no antes, ni mientras. Necesitarías escribir un driver (un 'filesystem filter driver') para capturar todas las operaciones de escritura que necesites, lo cual no es nada facil...

Aunque como ya digo, no estoy muy seguro de si habrá otra forma.
Saludos.
En línea

Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: DUDA Ruta archivos en ejecución[SOLUCIONADO]
« Respuesta #8 en: 7 Febrero 2014, 16:11 pm »

Gracias por las sugerencias, se te agradece mucho. O sino voy a buscar otra manera. Saludos.
En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: DUDA Ruta archivos en ejecución[SOLUCIONADO]
« Respuesta #9 en: 8 Febrero 2014, 05:53 am »

Como te dije antes, una forma (la más eficiente) sería listando los handles, encontré la utilidad commandline 'Handle' de SysInternals que te facilitaría la tarea de listar los Handles de los archivos que están abiertos por otros programas http://technet.microsoft.com/en-us/sysinternals/bb896655

Pero, como también dije, esto no va a funcionar con archivos de texto porque no se mantienen en modo lectura/escritura así que reálmente no están abiertos, depende del tipo de editor... (Lo probé con el notepad y el sublime text).

PD: Si te comento el uso de una aplicación de terceros donde lo único que debas hacer es parsear el output es porque de lo contraría deberías desarrollar un driver...

Saludos!
« Última modificación: 8 Febrero 2014, 06:17 am por Eleкtro » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda con manejo de archivos [Solucionado]
Programación Visual Basic
vivachapas 0 1,163 Último mensaje 23 Diciembre 2007, 03:03 am
por vivachapas
Duda con ruta al exportar a Excel (C#) [SOLUCIONADO]
.NET (C#, VB.NET, ASP)
Hartigan 2 5,652 Último mensaje 3 Septiembre 2010, 19:00 pm
por Hartigan
[Solucionado] Obtener la ruta de todos los procesos en ejecución « 1 2 3 »
.NET (C#, VB.NET, ASP)
Segurida 23 17,404 Último mensaje 30 Mayo 2011, 00:32 am
por seba123neo
(solucionado)Duda con hora de ejecucion
Programación Visual Basic
Trane! 4 2,057 Último mensaje 16 Julio 2011, 22:38 pm
por Trane!
Duda archivos en C (solucionado)
Programación C/C++
David8 4 2,758 Último mensaje 19 Mayo 2014, 18:36 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines