Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / FSO / 17 сообщений из 17, страница 1 из 1
14.07.2006, 17:59
    #33854971
amkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Всем доброго времени суток.

До слёз обидная проблема т.к. решение где-то рядом, а я его не вижу :(
ASP.NET+VisualStudio 2003.
На попытку выполнить скрипт:

...
var fso;
fso=new ActiveXObject("Scripting.FileSystemObject");
...

Выдаётся ошибка выполнения сценария (Невозможно создание объекта сервером программирования объектов).
Подсобите кто чем может, уж больно не хочется на выходные с такой невозможностью!
...
Рейтинг: 0 / 0
14.07.2006, 19:01
    #33855105
Dkm_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Кто ж разрешит-то? Даже и не думай.--
Абыpвалг! - сказал Linux после pyсификации
...
Рейтинг: 0 / 0
14.07.2006, 19:13
    #33855129
amkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Издеваешься ещё, а как тогда вообще на сервере папку создать?
...
Рейтинг: 0 / 0
14.07.2006, 19:24
    #33855148
Dkm_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
А кто сказал, что на сервере надо таким образом папки сосздавать?
WSH - это система скриптов для работы в консоли компьютера. И сервер тут ни при чём.--
Абыpвалг! - сказал Linux после pyсификации
...
Рейтинг: 0 / 0
14.07.2006, 19:28
    #33855156
amkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
У меня просто задачка такая, создать папку для пользователя, вот и всё тут. Решил так, если нет то как иначе? Может подскажешь?
...
Рейтинг: 0 / 0
14.07.2006, 19:36
    #33855165
ZeusTheTrueGod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Вот люди что задумали - создать папку у клиента. А может ещё и фалй создать, и реестр изменить, и файл скачать а потом запустить?

Всё, что у тебя есть - это окно интернет эксплорера ,а также немного в куках.
...
Рейтинг: 0 / 0
14.07.2006, 19:42
    #33855174
amkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Да не, папку создать на сервере нужно :) Недопонимание вышло.
...
Рейтинг: 0 / 0
14.07.2006, 19:47
    #33855185
Dkm_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Ты вообще что пишешь-то? И на чём? И когда ты этот свой скрипт запускаешь?

P.S. А папку создать просто - залогинься на этот сервер, запусти проводник, да создай
--
Абыpвалг! - сказал Linux после pyсификации
...
Рейтинг: 0 / 0
14.07.2006, 19:56
    #33855196
amkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Извеняйте, плохо сформулировал :)
ASP.NET 2.0.
Пользователь на обычной WebForm выбирает файл. Я его кидаю на сервер и (по Submit) должен поместить в папку по текущей дате (которой пока на сервере нет). Пишу на С#.
...
Рейтинг: 0 / 0
14.07.2006, 19:57
    #33855198
amkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Вот и вопрос, как в CodeBehind создать папку на сервере :)
...
Рейтинг: 0 / 0
14.07.2006, 20:06
    #33855203
Gollum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Здравствуйте, amkar, Вы писали:

A>Вот и вопрос, как в CodeBehind создать папку на сервере :)

Да уж не через активикс наверное. System.IO.Directory.CreateDirectoryЛюбая весть изначально благая, просто ты к этому еще не привык
...
Рейтинг: 0 / 0
14.07.2006, 20:07
    #33855205
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
System.IO.Directory.CreateDirectory()
Юзер, под которым крутится ASP.NET, должен иметь соотв права на создание папок/файлов.

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
14.07.2006, 20:21
    #33855226
amkar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Что и требовалось доказать! Спасибо.
...
Рейтинг: 0 / 0
14.07.2006, 20:53
    #33855253
Dkm_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Можно было бы ограничиться указанием на System.IO. В педагогических целях.
--
Абыpвалг! - сказал Linux после pyсификации
...
Рейтинг: 0 / 0
14.07.2006, 21:19
    #33855283
Gollum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Здравствуйте, Dkm_S, Вы писали:

D_S>Можно было бы ограничиться указанием на System.IO. В педагогических целях.

Тогда был бы очередной повод покричать про гадов с рсдн, которые вовсю глумятся над новичками.Ihesu who hath wonders sore, grants us the blyss of heathen
...
Рейтинг: 0 / 0
14.07.2006, 21:28
    #33855294
Dkm_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
Да ладно, чем тут глумиться? Там всё так просто, а человек что-то, да знает. Самостоятельно узнанное приживается надёжнее.--
Абыpвалг! - сказал Linux после pyсификации
...
Рейтинг: 0 / 0
14.07.2006, 22:33
    #33855364
dotnetcoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FSO
2amkar:

Если я тебя правильно понял то :

Добавляешь

using System.Security.Principal;
using System.Security.Permissions;
using System.Runtime.InteropServices;
[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, UnmanagedCode = true)]
[assembly: PermissionSetAttribute(SecurityAction.RequestMinimum, Name = "FullTrust")]


    public class WindowsIdentityEx : IDisposable, IIdentity
        {
            #region Unmanaged Code
            [DllImport("advapi32.dll", SetLastError = true)]
            public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
                int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

            [DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
            private unsafe static extern int FormatMessage(int dwFlags, ref IntPtr lpSource,
                int dwMessageId, int dwLanguageId, ref String lpBuffer, int nSize, IntPtr* Arguments);

            [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
            public extern static bool CloseHandle(IntPtr handle);

            [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,
                int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);


            public unsafe static string GetErrorMessage(int errorCode)
            {
                int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
                int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
                int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;

                int messageSize = 255;
                String lpMsgBuf = "";
                int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;

                IntPtr ptrlpSource = IntPtr.Zero;
                IntPtr prtArguments = IntPtr.Zero;

                int retVal = FormatMessage(dwFlags, ref ptrlpSource, errorCode, 0, ref lpMsgBuf, messageSize, &prtArguments);
                if (0 == retVal)
                {
                    throw new Exception("Failed to format message for error code " + errorCode + ". ");
                }

                return lpMsgBuf;
            }
            #endregion

            private const int LOGON32_PROVIDER_DEFAULT = 0;
            private const int LOGON32_LOGON_INTERACTIVE = 2;
            private const int SecurityImpersonation = 2;


            private bool _disposed = false;
            private IntPtr _tokenHandle = new IntPtr(0);
            private IntPtr _dupeTokenHandle = new IntPtr(0);
            private string _userName = string.Empty;
            private string _domainName = string.Empty;
            private string _password = string.Empty;
            private WindowsIdentity _windowsIdentity = null;
            private void Init()
            {
                _tokenHandle = IntPtr.Zero;
                _dupeTokenHandle = IntPtr.Zero;
            }
            public WindowsIdentityEx (string userName, string domainName, string password)
            {
                this.Init();
                bool returnValue = LogonUser(userName, domainName, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref _tokenHandle);

                if (false == returnValue)
                {
                    int ret = Marshal.GetLastWin32Error();
                    int errorCode = 0x5; //ERROR_ACCESS_DENIED
                    throw new System.ComponentModel.Win32Exception(errorCode,string.Format("\nError: [{0}] {1}\n", ret, GetErrorMessage(ret)));
                }

                bool retVal = DuplicateToken(_tokenHandle, SecurityImpersonation, ref _dupeTokenHandle);

                if (false == retVal)
                {

                    CloseHandle(_tokenHandle);
                    throw new Exception("Unable to duplicate token");
                }

                _windowsIdentity = new WindowsIdentity(_dupeTokenHandle);
            }
            public WindowsIdentityEx (IntPtr userToken)
            {
                this.Init();
                _windowsIdentity = new WindowsIdentity(userToken);
            }
            public WindowsIdentityEx (string sUserPrincipalName)
            {
                this.Init();
                _windowsIdentity = new WindowsIdentity(sUserPrincipalName);
            }
            public WindowsIdentityEx (IntPtr userToken, string type)
            {
                this.Init();
                _windowsIdentity = new WindowsIdentity(type);
            }
            public WindowsIdentityEx (string sUserPrincipalName, string type)
            {
                this.Init();
                _windowsIdentity = new WindowsIdentity(sUserPrincipalName,type);
            }
            public WindowsIdentityEx (IntPtr userToken, string type, WindowsAccountType acctType)
            {
                this.Init();
                _windowsIdentity = new WindowsIdentity(userToken, type, acctType);
            }
            public WindowsIdentityEx (IntPtr userToken, string type, WindowsAccountType acctType, bool isAuthenticated)
            {
                this.Init();
                _windowsIdentity = new WindowsIdentity(userToken, type, acctType, isAuthenticated);
            }

            public void Dispose ()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            private void Dispose (bool disposing)
            {
                if (!this._disposed)
                {
                    if (disposing && _windowsIdentity!=null)
                    {
#if (FW2)
                    _windowsIdentity.Dispose();
#endif
                    }

                    if (_tokenHandle != IntPtr.Zero)
                    {
                        CloseHandle(_tokenHandle);
                        _tokenHandle = IntPtr.Zero;
                    }

                    if (_dupeTokenHandle != IntPtr.Zero)
                    {
                        CloseHandle(_dupeTokenHandle);
                        _dupeTokenHandle = IntPtr.Zero;
                    }
                }

                _disposed = true;

            }
            ~WindowsIdentityEx ()
            {
                Dispose(false);
            }

            public string AuthenticationType
            {
                get { return _windowsIdentity.AuthenticationType; }
            }
            public bool IsAuthenticated
            {
                get { return _windowsIdentity.IsAuthenticated; }
            }
            public string Name
            {
                get { return _windowsIdentity.Name; }
            }

            public virtual bool IsAnonymous
            {
                get { return _windowsIdentity.IsAnonymous; }
            }
            public virtual bool IsGuest
            {
                get { return _windowsIdentity.IsGuest; }
            }
            public virtual bool IsSystem
            {
                get { return _windowsIdentity.IsSystem; }
            }

            public virtual IntPtr Token
            {
                get { return _windowsIdentity.Token; }
            }

            public WindowsIdentity WindowsIdentity
            {
                get { return _windowsIdentity; }
            }
            public virtual WindowsImpersonationContext Impersonate()
            {
                return _windowsIdentity.Impersonate();
            }

            public static WindowsImpersonationContext Impersonate(IntPtr userToken)
            {
                return WindowsIdentity.Impersonate(userToken);
            }
            public static WindowsIdentity GetAnonymous()
            {
                return WindowsIdentity.GetAnonymous();
            }
            public static WindowsIdentity GetCurrent()
            {
                return WindowsIdentity.GetCurrent();
            }

#if (FW2)

        public TokenImpersonationLevel ImpersonationLevel
        {
            get { return _windowsIdentity.ImpersonationLevel; }
        }

        public SecurityIdentifier Owner
        {
            get { return _windowsIdentity.Owner; }
        }

        public SecurityIdentifier User
        {
            get { return _windowsIdentity.User; }
        }

        public static WindowsIdentity GetCurrent(bool ifImpersonating)
        {
            return WindowsIdentity.GetCurrent(ifImpersonating);
        }

        public static WindowsIdentity GetCurrent(TokenAccessLevels desiredAccess)
        {
            return WindowsIdentity.GetCurrent(desiredAccess);
        }
#endif
        }


        public WindowsImpersonationContext ImpersonateUser()
        {
            CheckImpersonateUserSettings();

            string Username        = ConfigurationSettings.AppSettings["ImpersonateUser"];
            string Domainname    = ConfigurationSettings.AppSettings["ImpersonateUserDomain"];
            string Password        = ConfigurationSettings.AppSettings["ImpersonateUserPass"];

            WindowsIdentityEx newId = new WindowsIdentityEx(Username.Trim(),Domainname.Trim(),Password.Trim());

            if (newId==null) throw new Exception(string.Format("Identität des Benutzers {0} in der Domäne {1} ist nicht gültig",Username,Domainname));

            WindowsIdentity    windowsIdentity = newId.WindowsIdentity;

            if (windowsIdentity==null) throw new Exception(string.Format("Identität des Benutzers {0} in der Domäne {1} ist nicht gültig",Username,Domainname));

            return windowsIdentity.Impersonate();
        }


После чего берешь свой файло в буфер, имперсонируешся под юзверем из домена и пишешь буфер на сервер.


Я например так файло двигал из WebService на DFS, вот почиканый код  код :

        private bool MoveFile(string from,string to)
        {
            System.IO.FileStream fsRead =null;

            bool ok = false;

            WindowsImpersonationContext impersonatedUser = null;

            try
            {
                fsRead = new System.IO.FileStream(from,System.IO.FileMode.Open,System.IO.FileAccess.Read);
                byte[] b = new byte[fsRead.Length];
                while (fsRead.Read(b,0,b.Length) > 0);
            
                impersonatedUser = ImpersonateUser();

                System.IO.FileStream fsWrite = null;

            
                try
                {
                    fsWrite = new System.IO.FileStream(to,System.IO.FileMode.Create,System.IO.FileAccess.ReadWrite);
                
                    fsWrite.Write(b,0,b.Length);
                    fsWrite.Flush();
                    fsWrite.Close();

                    ok=true;
                }
                catch(Exception ex)
                {
                    // removed
                }                        

            }
            catch(Exception ex)
            {
                // removed
            }
            finally
            {
                try
                {
                    if (impersonatedUser!=null) impersonatedUser.Undo();

                    if (fsRead!=null) fsRead.Close();

                    if (ok &&System.IO.File.Exists(from))
                    {
                        System.IO.File.Delete(from);
                    }
                }
                catch(Exception ex)
                {
                    // removed
                }
            }

            return ok;        
        }




-- Если тебе помогли, незабудь сказать спасибо --
-- Это всё мое личное мнение которое может не совпадать с Вашим или может быть ошибочным --

.NetCoder
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / FSO / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]