Существует ли замена для средства командной строки CASPOL.exe?

При попытке запустить .NET-приложение выдает исключение PolicyException, потому что «разрешена только одна группа». Инструмент должен отображать существующие настройки и позволять удалять выбранные настройки. Использование каспола для перечисления бесполезно, это жестоко.

Я видел, что есть простой графический интерфейс, который позволяет определять НОВЫЕ настройки, но не позволяет перечислять или удалять существующие настройки.

Каспол - это кошмар, неудивительно, что его используют по своему усмотрению. С .NET 1.1 Microsoft предоставила конфигурационную утилиту, но для .NET 2.0 я ничего не нашел.


person tantran    schedule 08.06.2010    source источник


Ответы (4)


Для 2.0 также есть Configuration Applet, думаю, он поставляется с 2.0 SDK. Если вы установили его, он должен быть в Admin Tools и называться «Конфигурация Microsoft .NET Framework 2.0».

person Hans Olsson    schedule 08.06.2010

Вы можете создать свой собственный инструмент (графический интерфейс или командную строку) с помощью этого фрагмента кода:

static void SetPermission( string target ) {
    try {
        // Find the machine policy level
        PolicyLevel machinePolicyLevel = null;
        System.Collections.IEnumerator policyHierarchy = SecurityManager.PolicyHierarchy();

        while ( policyHierarchy.MoveNext() ) {
            PolicyLevel level = (PolicyLevel)policyHierarchy.Current;
            if ( level.Label == "Machine" ) {
                machinePolicyLevel = level;
                break;
            }
        }


        if ( machinePolicyLevel == null ) {
            throw new ApplicationException(
                "Could not find Machine Policy level. Code Access Security " +
                "is not configured for this application."
                );
        }

        // Create a new FullTrust permission set
        PermissionSet permissionSet = new NamedPermissionSet( "FullTrust" );

        IMembershipCondition membershipCondition = new UrlMembershipCondition( target );

        // Create the code group
        PolicyStatement policyStatement = new PolicyStatement( permissionSet );
        CodeGroup codeGroup = new UnionCodeGroup( membershipCondition, policyStatement );
        codeGroup.Description = "Custom code group created by PermSet utility.";
        codeGroup.Name = "CustomCodeGroup-" + Guid.NewGuid().ToString();

        // Add the code group
        machinePolicyLevel.RootCodeGroup.AddChild( codeGroup );

        // Save changes
        SecurityManager.SavePolicy();
    }
    catch ( Exception ex ) {
        Console.WriteLine();
        Console.WriteLine( ex.ToString() );
        throw;
    }
}
person TcKs    schedule 08.06.2010

Утилита является частью SDK в .Net 2.0. Убедитесь, что он установлен.

Кроме того, вам может быть интересно узнать, что .Net 3.5 sp1 и более поздние версии устранили некоторые болевые точки с помощью CAS.

person Joel Coehoorn    schedule 08.06.2010
comment
Спасибо, это работает! Это инструмент Mscorcfg.msc, он был установлен вместе с SDK (tx для гиперссылки). Я нашел его в: C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin Это все равно сложно, но PolicyException исчезнет после того, как я сбросил все настройки и установил только необходимые новые. - person tantran; 08.06.2010

MsCorCfg, похоже, не был доступен в более поздних выпусках Visual Studio. У меня 2010 год, но я не могу найти этот файл.

person abhi    schedule 15.07.2010