Jump to content

Get Full Process Path from ProcessID?


Recommended Posts

A search would have revealed This


Time you enjoyed wasting is not wasted time ......T.S. Elliot
Suspense is worse than disappointment................Robert Burns
God help the man who won't help himself, because no-one else will...........My Grandmother

Link to comment
Share on other sites

  • 6 years later...

That topic is locked and does not work 100%

Only some procesess terurn path.

explorer.exe returns weird character and other programs return  questionmarks.

Why is that ?

Is there an alternative that would not only point to the folder but highlight the file as well ?

 

Thanks for reading this old topic.

Thanks !

Link to comment
Share on other sites

The only reason why it doesnt work is because i dont know how to use it.

Not only that, but my listview is killing the script by constantly reading from it. Have no idea how to make it read once and then stop unless item is clicked.

Please have a look at line 73

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Process.au3>
 #include <WinAPIProc.au3>

$ProgTitle = "Unhide 'n' Hide Hiddent Windows"
$File = (@DesktopDir & "\IgnoreList.txt")
$Gui = GUICreate ($ProgTitle,470,600)
GUICtrlCreateGroup ("Windows",5,5,290,590)
$Listview = GUICtrlCreateListView ("Title|Handle",10,25,280,565)
_GUICtrlListView_SetColumnWidth ( $Listview, 0, 190 )
_GUICtrlListView_SetColumnWidth ( $Listview, 1,70 )
GUICtrlCreateGroup ("Action",295,5,170,400)
$Title = GUICtrlCreateInput ("Wudow Title",300,25,160,20)
$Handle = GUICtrlCreateInput ("Window Handle",300,45,160,20)
$Process = GUICtrlCreateInput ("Process Name",300,65,160,20)
$processPID = GUICtrlCreateInput ("Process PID",300,85,160,20)
$AddtoIgnore = GUICtrlCreateButton ("Add to Ignore.txt",300,105,160,25)
$OpenProcessFile = GUICtrlCreateButton ("Open Process File",300,130,160,25)
$TerminateProcess = GUICtrlCreateButton ("Terminate Process",300,155,160,25)
$Show= GUICtrlCreateButton ("Show this window",300,180,160,25)
$Hide= GUICtrlCreateButton ("Hide this window",300,205,160,25)
_GetWindows()
GUISetState (@SW_SHOW,$Gui)
While 1
    $MSG = GUIGetMsg()
    If $MSG = $GUI_EVENT_CLOSE Then ExitLoop
    If $MSG = $AddtoIgnore Then
        $FileRead = FileRead ($File)
        $TitleRead = GUICtrlRead ($Title)
        If StringInStr ($FileRead,"["& $TitleRead & "]") = 0 Then
            FileClose ($FileRead)
            FileWrite ($File,"["& $TitleRead & "]")
            GUICtrlSetData ($Title,"")
            GUICtrlSetData ($Handle,"")
        Else
            $AskToRemove = MsgBox(48+4,'Warning','Title ' & $TitleRead & " is already aded to Ignore.txt file." & @CRLF & "Would you like to remove it ?")
            If $AskToRemove = 6 Then
                $NewFile = StringReplace ($FileRead,"["& $TitleRead & "]","")
                $FileOpen = FileOpen ($File,2) ;Open and erase previous content
                FileWrite ($FileOpen,$NewFile)
                FileClose ($FileOpen)
                MsgBox(32,"information","Done")
            EndIf
        EndIf
        _GetWindows()
    Endif
    If $MSG = $TerminateProcess Then ProcessClose (GUICtrlRead ($Process))
    If $MSG = $OpenProcessFile Then
        $PID = WinGetProcess (GUICtrlRead ($Title))
        $PName = _ProcessGetName ($PID)
        $FullPath = _ProcessGetLocation($PID)
        $Test = StringReplace ($FullPath,$PName,"")
        $FinalPath = StringTrimRight ($Test,1)
        If $FinalPath = "" Then
            MsgBox (16,"Error","Unable to get path" & @CRLF & $FullPath)
        Else
            ShellExecute ($FinalPath)
        EndIf
    EndIf
    $Index = _GUICtrlListView_GetNextItem ($Listview)
    If $Listview > "" Then
        $Index = _GUICtrlListView_GetNextItem ($Listview)
        $SelectedItemTitle = _GUICtrlListView_GetItemText ($Listview,$Index,0)
        $SelecedItemHandle = _GUICtrlListView_GetItemText ($Listview,$Index,1)
        $PID = WinGetProcess (GUICtrlRead ($Title),"")
        $PName = _ProcessGetName ($PID)
        $APIPATH = _WinAPI_EnumProcessModules ($PID)

        GUICtrlSetData ($Title,$SelectedItemTitle)
        GUICtrlSetData ($Handle,$SelecedItemHandle)
        GUICtrlSetData ($processPID,$PID)
        GUICtrlSetData ($Process,$PName)
        ;_GUICtrlListView_SetItemSelected ($Listview,$Index,False);deselect item to prevent this if statement triggered without manually clicking.
    EndIf
WEnd
Func _GetWindows()
    _GUICtrlListView_DeleteAllItems($Listview)
    $IgnoreList = FileRead ($File)
    $aList = WinList()
    For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 1) Then
            If StringInStr ($IgnoreList,"[" & $aList[$i][0] & "]") = 0 Then
                GUICtrlCreateListViewItem ($aList[$i][0] & "|" & $aList[$i][1],$Listview)
            EndIf
        EndIf
    Next
EndFunc

Func _ProcessGetLocation($iPID)
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
    If $aProc[0] = 0 Then Return SetError(1, 0, '')
    Local $vStruct = DllStructCreate('int[1024]')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
    If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
    Return $aReturn[3]
EndFunc
Edited by tonycst
Link to comment
Share on other sites

I was addressing this problem...

Not only that, but my listview is killing the script by constantly reading from it. Have no idea how to make it read once and then stop unless item is clicked.

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

Also, everytime throught the messageloop you are doing this...

$Index = _GUICtrlListView_GetNextItem ($Listview)

It's difficult to follow what you want to do and what exactly is wrong...

edit: By the way, I did run it.  As you have it coded it takes appx. 10% CPU.  When changed as I suggested it takes < .1%

Edited by kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

Is there an alternative that would not only point to the folder but highlight the file as well?

 

Replace your ShellExecute($FinalPath) with the long-winded yet aptly named:

_WinAPI_ShellOpenFolderAndSelectItems($FullPath)

(Requires #include <WinAPIShellEx.au3>)

Edited by Kilmatead
Link to comment
Share on other sites

tonycst,

As near as I can determine this is what you are trying to do...

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Process.au3>
 #include <WinAPIProc.au3>
#include <WindowsConstants.au3> ;   <--------------------------------------------


$ProgTitle = "Unhide 'n' Hide Hiddent Windows"
$File = (@DesktopDir & "\IgnoreList.txt")
$Gui = GUICreate ($ProgTitle,470,600)
GUICtrlCreateGroup ("Windows",5,5,290,590)
$Listview = GUICtrlCreateListView ("Title|Handle",10,25,280,565)
_GUICtrlListView_SetColumnWidth ( $Listview, 0, 190 )
_GUICtrlListView_SetColumnWidth ( $Listview, 1,70 )
GUICtrlCreateGroup ("Action",295,5,170,400)
$Title = GUICtrlCreateInput ("Wudow Title",300,25,160,20)
$Handle = GUICtrlCreateInput ("Window Handle",300,45,160,20)
$Process = GUICtrlCreateInput ("Process Name",300,65,160,20)
$processPID = GUICtrlCreateInput ("Process PID",300,85,160,20)
$AddtoIgnore = GUICtrlCreateButton ("Add to Ignore.txt",300,105,160,25)
$OpenProcessFile = GUICtrlCreateButton ("Open Process File",300,130,160,25)
$TerminateProcess = GUICtrlCreateButton ("Terminate Process",300,155,160,25)
$Show= GUICtrlCreateButton ("Show this window",300,180,160,25)
$Hide= GUICtrlCreateButton ("Hide this window",300,205,160,25)
$ListView_Dummy = GUICtrlCreateDummy()  ;   <-------------------------------------
_GetWindows()
GUISetState (@SW_SHOW,$Gui)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;   <-------------------------------------
While 1
    $MSG = GUIGetMsg()
    If $MSG = $GUI_EVENT_CLOSE Then ExitLoop
    If $MSG = $AddtoIgnore Then
        $FileRead = FileRead ($File)
        $TitleRead = GUICtrlRead ($Title)
        If StringInStr ($FileRead,"["& $TitleRead & "]") = 0 Then
            FileClose ($FileRead)
            FileWrite ($File,"["& $TitleRead & "]")
            GUICtrlSetData ($Title,"")
            GUICtrlSetData ($Handle,"")
        Else
            $AskToRemove = MsgBox(48+4,'Warning','Title ' & $TitleRead & " is already aded to Ignore.txt file." & @CRLF & "Would you like to remove it ?")
            If $AskToRemove = 6 Then
                $NewFile = StringReplace ($FileRead,"["& $TitleRead & "]","")
                $FileOpen = FileOpen ($File,2) ;Open and erase previous content
                FileWrite ($FileOpen,$NewFile)
                FileClose ($FileOpen)
                MsgBox(32,"information","Done")
            EndIf
        EndIf
        _GetWindows()
    Endif
    If $MSG = $TerminateProcess Then ProcessClose (GUICtrlRead ($Process))
    If $MSG = $OpenProcessFile Then
        $PID = WinGetProcess (GUICtrlRead ($Title))
        $PName = _ProcessGetName ($PID)
        $FullPath = _ProcessGetLocation($PID)
        $Test = StringReplace ($FullPath,$PName,"")
        $FinalPath = StringTrimRight ($Test,1)
        If $FinalPath = "" Then
            MsgBox (16,"Error","Unable to get path" & @CRLF & $FullPath)
        Else
            ShellExecute ($FinalPath)
        EndIf
    EndIf
    If $MSG = $ListView_Dummy Then                  ;   <-----------------------------------------------
        $Index = _GUICtrlListView_GetNextItem ($Listview)
        $SelectedItemTitle = _GUICtrlListView_GetItemText ($Listview,$Index,0)
        $SelecedItemHandle = _GUICtrlListView_GetItemText ($Listview,$Index,1)
        $PID = WinGetProcess (GUICtrlRead ($Title),"")
        $PName = _ProcessGetName ($PID)
        $APIPATH = _WinAPI_EnumProcessModules ($PID)

        GUICtrlSetData ($Title,$SelectedItemTitle)
        GUICtrlSetData ($Handle,$SelecedItemHandle)
        GUICtrlSetData ($processPID,$PID)
        GUICtrlSetData ($Process,$PName)
        ;_GUICtrlListView_SetItemSelected ($Listview,$Index,False);deselect item to prevent this if statement triggered without manually clicking.
    EndIf
WEnd
Func _GetWindows()
    _GUICtrlListView_DeleteAllItems($Listview)
    $IgnoreList = FileRead ($File)
    $aList = WinList()
    For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 1) Then
            If StringInStr ($IgnoreList,"[" & $aList[$i][0] & "]") = 0 Then
                GUICtrlCreateListViewItem ($aList[$i][0] & "|" & $aList[$i][1],$Listview)
            EndIf
        EndIf
    Next
EndFunc

Func _ProcessGetLocation($iPID)
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
    If $aProc[0] = 0 Then Return SetError(1, 0, '')
    Local $vStruct = DllStructCreate('int[1024]')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
    If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
    Return $aReturn[3]
EndFunc

; added the detection routine for DBL click

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tNMHDR, $hWndFrom, $iCode, $w

    $tNMHDR     = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom   = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode      = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case guictrlgethandle($listview)
            Switch $iCode
                Case $NM_DBLCLK
                    GUICtrlSendToDummy($ListView_Dummy)
                Case $LVN_ITEMCHANGED
                    GUICtrlSendToDummy($ListView_Dummy)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG

EndFunc

changed / added lines are indicated by "<-----------------------------------------------"

edit: The code you are working from is several generations of Autoit old.  You may need to change several things to get what you want.

edit2: added code to support moving through LV with arrow keys

edit3: changed $openprocessfile routine

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Process.au3>
 #include <WinAPIProc.au3>
#include <WindowsConstants.au3> ;   <--------------------------------------------


$ProgTitle = "Unhide 'n' Hide Hiddent Windows"
$File = (@DesktopDir & "\IgnoreList.txt")
$Gui = GUICreate ($ProgTitle,470,600)
GUICtrlCreateGroup ("Windows",5,5,290,590)
$Listview = GUICtrlCreateListView ("Title|Handle",10,25,280,565)
_GUICtrlListView_SetColumnWidth ( $Listview, 0, 190 )
_GUICtrlListView_SetColumnWidth ( $Listview, 1,70 )
GUICtrlCreateGroup ("Action",295,5,170,400)
$Title = GUICtrlCreateInput ("Wudow Title",300,25,160,20)
$Handle = GUICtrlCreateInput ("Window Handle",300,45,160,20)
$Process = GUICtrlCreateInput ("Process Name",300,65,160,20)
$processPID = GUICtrlCreateInput ("Process PID",300,85,160,20)
$AddtoIgnore = GUICtrlCreateButton ("Add to Ignore.txt",300,105,160,25)
$OpenProcessFile = GUICtrlCreateButton ("Open Process File",300,130,160,25)
$TerminateProcess = GUICtrlCreateButton ("Terminate Process",300,155,160,25)
$Show= GUICtrlCreateButton ("Show this window",300,180,160,25)
$Hide= GUICtrlCreateButton ("Hide this window",300,205,160,25)
$ListView_Dummy = GUICtrlCreateDummy()  ;   <-------------------------------------
_GetWindows()
GUISetState (@SW_SHOW,$Gui)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;   <-------------------------------------
While 1
    $MSG = GUIGetMsg()
    If $MSG = $GUI_EVENT_CLOSE Then ExitLoop
    If $MSG = $AddtoIgnore Then
        $FileRead = FileRead ($File)
        $TitleRead = GUICtrlRead ($Title)
        If StringInStr ($FileRead,"["& $TitleRead & "]") = 0 Then
            FileClose ($FileRead)
            FileWrite ($File,"["& $TitleRead & "]")
            GUICtrlSetData ($Title,"")
            GUICtrlSetData ($Handle,"")
        Else
            $AskToRemove = MsgBox(48+4,'Warning','Title ' & $TitleRead & " is already aded to Ignore.txt file." & @CRLF & "Would you like to remove it ?")
            If $AskToRemove = 6 Then
                $NewFile = StringReplace ($FileRead,"["& $TitleRead & "]","")
                $FileOpen = FileOpen ($File,2) ;Open and erase previous content
                FileWrite ($FileOpen,$NewFile)
                FileClose ($FileOpen)
                MsgBox(32,"information","Done")
            EndIf
        EndIf
        _GetWindows()
    Endif
    If $MSG = $TerminateProcess Then ProcessClose (GUICtrlRead ($Process))
    If $MSG = $OpenProcessFile Then
        $FullPath = _WinAPI_GetProcessFileName(WinGetProcess (GUICtrlRead ($Title)))
        if @error <> 0 or $FullPath = "" then continueloop
        ConsoleWrite('shelling to ' & $FullPath & @CRLF)
        ShellExecute ($FullPath)
    EndIf
    If $MSG = $ListView_Dummy Then                  ;   <-----------------------------------------------
        $Index = _GUICtrlListView_GetNextItem ($Listview)
        $SelectedItemTitle = _GUICtrlListView_GetItemText ($Listview,$Index,0)
        $SelecedItemHandle = _GUICtrlListView_GetItemText ($Listview,$Index,1)
        $PID = WinGetProcess (GUICtrlRead ($Title),"")
        $PName = _ProcessGetName ($PID)
        $APIPATH = _WinAPI_EnumProcessModules ($PID)

        GUICtrlSetData ($Title,$SelectedItemTitle)
        GUICtrlSetData ($Handle,$SelecedItemHandle)
        GUICtrlSetData ($processPID,$PID)
        GUICtrlSetData ($Process,$PName)
        ;_GUICtrlListView_SetItemSelected ($Listview,$Index,False);deselect item to prevent this if statement triggered without manually clicking.
    EndIf
WEnd
Func _GetWindows()
    _GUICtrlListView_DeleteAllItems($Listview)
    $IgnoreList = FileRead ($File)
    $aList = WinList()
    For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 1) Then
            If StringInStr ($IgnoreList,"[" & $aList[$i][0] & "]") = 0 Then
                GUICtrlCreateListViewItem ($aList[$i][0] & "|" & $aList[$i][1],$Listview)
            EndIf
        EndIf
    Next
EndFunc

Func _ProcessGetLocation($iPID)
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
    If $aProc[0] = 0 Then Return SetError(1, 0, '')
    Local $vStruct = DllStructCreate('int[1024]')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
    If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
    Return $aReturn[3]
EndFunc

; added the detection routine for DBL click

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tNMHDR, $hWndFrom, $iCode, $w

    $tNMHDR     = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom   = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode      = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case guictrlgethandle($listview)
            Switch $iCode
                Case $NM_DBLCLK
                    GUICtrlSendToDummy($ListView_Dummy)
                Case $LVN_ITEMCHANGED
                    GUICtrlSendToDummy($ListView_Dummy)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG

EndFunc
Edited by kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

Whats a dummy thing for and what does it do that makes listview read when clicked while listview its self does not return any values when clicked.

It kinda does work but it takes 2 clicks to get correct process.exe. I was never able to figure out why but ok, good enough for me to start learning something from this.

THanks !

Link to comment
Share on other sites

I also noticed that _ProcessGetLocation does not work with C drive. It only identifies exe locations of other hard drives. Why is that ?

Func _ProcessGetLocation($iPID)
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
    If $aProc[0] = 0 Then Return SetError(1, 0, '')
    Local $vStruct = DllStructCreate('int[1024]')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
    If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
    Return $aReturn[3]
EndFunc
Link to comment
Share on other sites

tonycst,

This

$FullPath = _WinAPI_GetProcessFileName(WinGetProcess (GUICtrlRead ($Title)))

takes the place of _processgetlocation.

Whats a dummy thing for and what does it do that makes listview read when clicked while listview its self does not return any values when clicked.

 

The dummy control is actioned by a notification message ($NM_DBLCLK or $LVN_ITEMCHANGED in your case).  It will then execute whatever code is in the message loop for that control.

It kinda does work but it takes 2 clicks to get correct process.exe. I was never able to figure out why but ok, good enough for me to start learning something from this.

 

There are many notification messages.  I used these two for the sake of illustration.  You can find the messages in ListViewConstants.au3.

kylomas

Edited by kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

What does "doesn't work" mean, exactly. 

Still doesnt work for all processes.
Most processes that maybe services are not working. It doesnt even work for explorer.exe.

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

Its confusing. Post reffers to some UDF i need to include that has dead link.

I ran the scrip in X64 and it worked.

I hate the way windows works with 64bit with all the redirection garbage etc. Would have been allot easier to just add "Program Files (X64)" and then "Program Files (X128)" or what ever comes next, instead of having (X64) in "Program Files" and redirecting 32bit to "Program Files (x86)"

Too many issues.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...