Encontramos o problema. A alteração do parâmetro de criação da plataforma de destino para "Prefer 32-bits" nas propriedades do projeto resolveu o problema.
Para um dos meus aplicativos, tenho um serviço do Windows (no Windows Server 2012 R2 x64), cuja função é executar várias tarefas em diferentes programações e acionadores. Um deles é redefinir uma senha de usuário no Office 365. O servidor no qual o serviço é executado tem o Assistente de Conexão do Microsoft Online Services e o Módulo do Microsoft Azure Active Directory para Windows PowerShell instalado (MSOnline versão 1.1.166.0).
No PowerShell, posso chamar com sucesso o seguinte com meu usuário.
$> $cred = Get-Credential
$> Connect-MsolService -Credential $cred
Se eu executo o PowerShell como a conta em que meu serviço é iniciado, ele também é executado corretamente. A execução da função de redefinição de senha no serviço do Windows falha com a seguinte mensagem:
The term 'Connect-MsolService' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
A inclusão de um sinalizador de depuração na importação do módulo no código nos permitiu arrastar o problema para o comando MSOnline do módulo de importação. Nós temos o erro:
The specified module 'MSOnline' was not loaded because no valid module file was found in any module directory.
Já tentamos remover e reinstalar na versão x64 as duas ferramentas (o Assistente de Conexão do Microsoft Online Services e o Módulo do Microsoft Azure Active Directory para Windows PowerShell). A variável do sistema "PATH" está correta com: % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Arquivos de Programas \ Microsoft \ Instalador da Plataforma Web \
A pasta C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules tem as subpastas do módulo MSOL MSOnline e MSOnlineExtended
A cópia das duas pastas em C: \ Windows \ sysWOW64 \ WindowsPowerShell \ v1.0 \ Modules, conforme relatado como solução em muitos outros tópicos, falha aqui com o seguinte erro:
System.Management.Automation.CmdletInvocationException: Could not load file or assembly 'file:///C:\Windows\system32\WindowsPowerShell\v1.0\Modules\MSOnline\Microsoft.Online.Administration.Automation.PSModule.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format. ---> System.BadImageFormatException: Could not load file or assembly
O código usado para o serviço do Windows foi executado e testado com êxito como uma ferramenta separada no mesmo servidor e o código também foi executado perfeitamente em uma máquina de desenvolvedor.
Essas investigações nos levam a pensar que há algum tipo de problema com o serviço em si, mas não conseguimos descobrir o que / por que.
Obrigado.