Antes de julgar esta resposta, saiba que é um trabalho em andamento. Os comentários foram demais e não foram realmente dedicados a responder a pergunta, mas sim encontrar a causa do problema.
Atualmente, não consigo obter uma cópia do win7 para verificar como o código abaixo está funcionando no win7, farei isso na próxima semana, ou apenas me diga o que você está experimentando ...
---- answer draft ----
Embora a melhor solução para o seu problema seja encontrar a causa, eu vou responder ao título das perguntas:
"how to prevent automatic logoff in windows 7"
Para capturar e impedir o logoff, a maneira atual que descobri foi capturar o evento "formclosing" de um formulário do Windows em C # e verificar se o CloseReason é CloseReason.WindowsShutDown. Este evento pode ser "negado" pelo código.
Este é o código inteiro:
using System;
using System.Windows.Forms;
using System.IO;
namespace BlockLogoffForm
{
public partial class PreventLogoff : Form
{
public PreventLogoff()
{
InitializeComponent();
}
private void PreventLogoff_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason.Equals(CloseReason.WindowsShutDown))
{
File.AppendAllText("c:\temp\logofflog.txt","log off prevented at " + DateTime.Now);
e.Cancel = true;
}
}
}
}
Baixe o binário compilado aqui: BlockLogoffForm.exe
No design atual, você precisaria iniciar este programa e deixá-lo em execução até que o logoff automático realmente aconteça. Outras redefinições podem trazer a mesma execução do aplicativo Tasktray ou similar.