Esegui un programma a 64 bit dalla shell a 32 bit


1

Sono passato da Cygwin a WSL di recente e ho un problema con Sourcetree e commithooks.

Sourcetree usa la propria versione di Cygwin (32 bit) per eseguire git. Il mio ambiente di sviluppo gira su WSL (che è solo a 64 bit).

Quindi quello che voglio fare è chiamare WSL bash da Sourcetrees Cygwin Bash ed eseguire i controlli del commithook. Ma questo non funziona, dato che Cygwin Bash è un programma a 32 bit e quindi non può eseguire WSL bash, che è solo a 64 bit. Quindi Cygwin Bash vede la bash WSL come un file non eseguibile.

C'è un modo per rompere la sandbox a 32 bit su Windows 10 per chiamare un programma a 64 bit?


1
poiché Cygwin Bash è un programma a 32 bit e quindi non può eseguire WSL bash, che è solo a 64 bit - Eh? al meglio delle mie conoscenze, non c'è nulla che ti impedisca di formare quella chiamata in ogni caso, a parte forse non riuscire a trovare l'eseguibile a 64 bit (causa del reindirizzamento del file system di WoW, che si applica solo a Program Files e System32). Se questo è il tuo problema, ci sono dei modi per aggirarlo: stackoverflow.com/questions/39812882/...
Bob

1
@Bob un programma Win32 a 32 bit può eseguire un'applicazione Windows a 64 bit senza problemi. Tuttavia, WSL supporta solo eseguibili ELF a 64 bit e non è possibile eseguire applicazioni Linux a 32 bit
phuclv

Il tuo W10 è a 32 o 64 bit?
Overmind

@ LưuVĩnhPhúc Ho preso questa domanda come 32-bit finestre Programma PE che chiama a 64 bit finestre Programma PE (bash.exe, come invocatore per WSL). In nessun punto è coinvolto un ELF a 32 bit.
Bob

@Overmind WSL è solo a 64 bit
phuclv

Risposte:


1

Quello che hai incontrato qui è Reindirizzamento del file system WOW64 . Perché bash.exe vive nel 64-bit System32 directory, ma i programmi a 32 bit vedono il 32-bit SysWOW64 quando chiedono System32. Non si tratta di non essere in grado di eseguire 64-bit da 32-bit, ma piuttosto di non essere in grado di farlo trova l'eseguibile che stai cercando di eseguire in primo luogo.

Hai un modo per aggirarlo. Citando da quel link:

Le applicazioni a 32 bit possono accedere alla directory di sistema nativa sostituendo% windir% \ Sysnative per% windir% \ System32. WOW64 riconosce Sysnative come alias speciale utilizzato per indicare che il file system non deve reindirizzare l'accesso.

Quindi chiama semplicemente il percorso esplicito tramite sysnative: %windir%\Sysnative\bash.exe (o $WINDIR/Sysnative/bash.exe all'interno di cygwin).


Grazie, mi sono confuso con SysWOW64 non contenente eseguibili a 64 bit, ma i file eseguibili a 32 bit.
Dakkaron

0

No, non direttamente se il tuo sistema operativo è a 32 bit, ma per questo puoi fare una sessione VM a 64 bit se hai un processore a 64 bit ma hai installato un sistema operativo host a 32 bit.


Leggi di nuovo la domanda. OP non ha un sistema operativo a 32 bit.
DavidPostill

Non è stato specificato per il sistema operativo.
Overmind

"Il mio ambiente di sviluppo gira su WSL (che è solo a 64 bit)."
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.