Pergunta

Eu estava lendo-se sobre NTVDM.exe como eu construir uma rápida aplicação de console de teste e ele caiu em uma máquina de amigos reclamando sobre isso EXE.

Como eu entendo tudo DOS cmd windows (C consola # aplicações incluídas) executado como 16bit não 32bit.

Isso é verdade? Será que isso significa todas as minhas obras aplicativos de escritório consola aplicativo de volta estão executando como 16bit ao invés de fazer a maior parte do 32bit disponíveis?

O que sobre os serviços do Windows? Como eu acredito que o escreveu como um aplicativo de console, em seguida, fez correr como um serviço do Windows?

Graças

Foi útil?

Solução

Qualquer .NET aplicativo que é compilado para x86 será de 32 bits

C aplicativos # console não estão funcionando no dos "reais" - eles executados em um ambiente de 32 bits ou de 64 bits -. Dependendo do seu sistema operacional e .NET framework

Outras dicas

Como eu entendo tudo DOS janelas cmd (C consola # aplicações incluídas) executado como 16bit não 32bit.

Isso é verdade?

Não, não em todos.

Você pode executar aplicativos do DOS no Windows, e eles são de 16 bits, mas o fato de que eles parecem um pouco consola-como é praticamente apenas coincidência.

Não há aplicativos .NET de 16 bits, e se um aplicativo é o modo de console ou não faz diferença para se é 16 ou 32 bits.

MS-DOS Apps executados como aplicativos de 16 bits sob o ntvdm.

Aplicativos "console do Windows" não são aplicações DOS, e executado como um processo nativo do Windows (onde um pouco no cabeçalho PE dos identifica EXE arquivá-lo como um aplicativo console, para que o Windows pode criar / prep um Console do Windows para o aplicativo se um já não existir, por exemplo, a execução de seu aplicativo de console do CMD ou PowerShell vai voltar a usar a janela do console já criado, enquanto um clique duplo no EXE no Explorer irá criar uma nova janela de console para a aplicação.)

CMD! = DOS

Console do Windows! = DOS

Da mesma forma, há uma API completa Console do Windows que está presente no Windows desde pelo menos o Windows 2000 (NT5) se não mais cedo (embora provavelmente NT3 / 4 somente.)

A NET aplicativo console. (Ou qualquer outro aplicativo .NET) será executado como qualquer que seja alvo hardware é JIT'ed para é. Assim, para x86 será de 32 bits.

Como eu entendo tudo DOS cmd windows (C consola # aplicações incluídas) executado como 16bit não 32bit.

Você está errado. Todas as janelas cmd.exe são de 32 ou 64 bits, dependendo da arquitetura.

DOS morreu junto com o Windows ME quase uma década atrás.

Eu não sei sobre qualquer implementação .NET VM que é capaz de rodar em modo de 16 bits. O tempo de execução Microsoft .NET e Mono são apenas dois 32/64 bits. Eu não sei sobre os outros menores, mas eu ficaria surpreso se eles pudessem trabalhar em modo de 16 bits.

Além disso, corre cmd.exe em modo de 32 bits como cmd.exe é um aplicativo do Windows de 32 bits. Por outro lado, command.com é executado no modo de 16 bits.

Na verdade, aplicativos de console estão longe de serem inerentemente de 16 bits. Isso é simplesmente não é verdade, não era mesmo verdade antes do Windows, o modo como o x86 protegido é de 32-bits, portanto, qualquer jogo ou aplicativo para DOS em execução no modo portected é de 32-bits.

Na NET, o tipo de UI (ou a falta de UI como no Windows Services) não afeta o comprimento de palavra da aplicação. Por padrão, os binários .NET são independentes de plataforma, e se executado como aplicativo de 32 bits ou 64 bits, dependendo do tipo de .NET Framework, kernel, etc. da máquina host. Embora possam ser compilado diretamente para 64-bits também.

Não há nada especial sobre um exe de console; é apenas um arquivo PE. Portanto, independentemente de consola vs winform exe vs serviço de janelas, é só ir para executar no modo tudo o que foi compilado.

Visual Studio etc nunca vai gerar um exe de 16 bits. x86 vs x64 é ;-p mais interessante

Provavelmente, o seu amigo não tem o .NET framework instalado (ou tem apenas 1.1).

Mesmo sob DOS, ".EXE" poderia ser de 16 bits ou de 32 bits (com a adequada codificação ou DOS biblioteca extensor).

NTVDM.EXE é o emulador DOS que suporta a execução de arquivos .COM e .EXE de 16 bits em um ambiente onde eles podem assumir a CPU é de 16 bits e que as chamadas de sistema do DOS estão disponíveis. Sua única associação com prompts de comando é que os programas DOS em modo texto usar a janela Console para fornecer a emulação de uma tela VGA em modo texto.

Como se observa, não há .NET VM disponível que pode ser executado em DOS. No entanto, pode divertida de começar a partir do Mono fontes do projeto e construir um que corre sob FreeDOS ... só para assustar seus amigos; -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top