Net и Server 2003

  • Автор темы Pretorian
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

Pretorian

#1
Пытаюсь в приложении получить хендл консоли с помощью GetStdHandle, на XP все удачно, на Server 2003 приложение пишет ошибку. Кто сталкивался с этим и как это лечится, помоему где то стоит какой то запрет на выполнение GetStdHandle.
Код:
using System;
using System.Runtime.InteropServices;
class Screen
{
[DllImport(”kernel32.dll”)]
static extern bool SetConsoleTextAttribute(int hConsoleOutput, ushort wAttributes);
[DllImport(”kernel32.dll”)]
static extern int GetStdHandle(uint nStdHandle);
const uint STD_OUTPUT_HANDLE = 0x0FFFFFFF5;
static Screen()
{
output_handle = GetStdHandle(STD_OUTPUT_HANDLE);
m_attributes = 7;
}
public static void PrintString(string str)
{
Console.Write(str);
}
public static ushort Attributes
{
get
{
return m_attributes;
}
set
{
m_attributes = value;
SetConsoleTextAttribute(output_handle, value);
}
}
private static ushort m_attributes;
private static int	output_handle;
}

class Example_4
{
public static void Main()
{
for (ushort i = 1; i < 8; i++)
{
Screen.Attributes = i;
Screen.PrintString(”Property Demo\n”);
}
}
}
 
P

Pretorian

#2
Вот:
Unhandled Exception: System.TypeInitializationException: The type initializer fo

r 'Screen' threw an exception. ---> System.Security.SecurityException: System.Se

curity.Permissions.SecurityPermission

at Screen..cctor()

The type of the first permission that failed was:

System.Security.Permissions.SecurityPermission

The demand was for:

<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Ve

rsion=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

version="1"

Flags="UnmanagedCode"/>



The Zone of the assembly that failed was:

MyComputer

--- End of inner exception stack trace ---

at Screen.set_Attributes(UInt16 value)

at Example_4.Main()
 
P

Pasha

#3
Для: Pretorian
Если ошибка появляется при запуске из сети, перепиши на локальный диск и запускай оттуда.
 
P

Pretorian

#4
Запускаю в терминале, по этому запуск производится локально для приложения. С локальным диском не пройдет, у меня ubuntu.
 
P

Pasha

#5
Для: Pretorian
Ок, тогда так: ты запускаешь с локального диска терминального сервера? или в терминале заходишь на шару другой машины и запускаешь оттуда?
 
P

Pretorian

#6
Обалдеть, действительно работает если с локального диска, а через шару на директорию локального диска не работает! Спасибо всем за помощь!
А че это framework себя так ведет?
 
P

Pasha

#7
Для: Pretorian
Секьюрити, все такое. Все, что не локальное должно быть урезано до невозможности.
Когда-то в java для апплетов так закрутили гайки, что апплеты теперь ничего не могут делать, только немного графику показывать и на мышку реагировать. В .net решили на эти грабли на наступать, сделали безопасность настраиваемой. Теперь гайки можно откручивать. Т.е. можно явно указывать что при запуске приложения N подписанного ключем M с локальной машины можно делать X,Y,Z, при запуске из LAN можно X,Y, а при запуске через браузер можно только X.
 
Статус
Закрыто для дальнейших ответов.