Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: v1rtyaluk
Дата сообщения: 13.04.2010 08:29

Цитата:
НЕНУЖНЫЕ кому???

я имел ввиду те файлы из-за которых может повиснуть вся система.
допустим если "тронуть" запущенный процесс explorer.exe то, зависает (отключается) все визуализация, а если display.dll то, вовсе монитор отказывается работать (но это все не работает до следующей перезагрузки).
Я хотел узнать есть-ли способ как-то быстро перечислить все эти файлы, допустим, в одной строке, а компилятор их не тронет....
Автор: Mike13x13
Дата сообщения: 13.04.2010 12:10
SerBUser

Цитата:
Вопрос по портальным технологиям SharePoint и C#.
Есть список с вложениями. Мне нужно все вложения из списка сохранить на локальный диск с сохранением структуры, потому как в разных пунктах списка вложенный файлы могу называться одинаково.
Вложения получаю так:


Можно приблизительно так:
if(!Directory.Exists(oattaches.UrlPrefix)
Directory.Create(oattaches.UrlPrefix)
и далее записись файла oattaches.UrlPrefix +"\\" + fileName;

Детали зависят от структуры твоей "структуры", извиняюсь за тавтологию.
Автор: KChernov
Дата сообщения: 13.04.2010 12:47
v1rtyaluk

Цитата:
я имел ввиду те файлы из-за которых может повиснуть вся система.
допустим если "тронуть" запущенный процесс explorer.exe то, зависает (отключается) все визуализация, а если display.dll то, вовсе монитор отказывается работать (но это все не работает до следующей перезагрузки).
Я хотел узнать есть-ли способ как-то быстро перечислить все эти файлы, допустим, в одной строке, а компилятор их не тронет....

А такие файлы разве можно просто так удалить?
Ну или попробовать процедуру удаления запускать с меньшим приоритетом/правами?..
Автор: blaro
Дата сообщения: 13.04.2010 13:17
v1rtyaluk
А какие файлы вообще должны быть обработаны? Какой то определенный тип (типы) или все за исключением .exe, .dll, .mui и т.д?
Если можешь напиши подробнее.
Автор: v1rtyaluk
Дата сообщения: 13.04.2010 15:52
blaro
для обработки нужны файлы с графическими ресурсами и еще некоторыми опциями, большинство таких файлов это:
- компоненты панели управления, *.cpl;
- системные библиотеки, типа shell32.dll, imageres.dll, user32,dll и т.д.;
- системные приложения, типа explorer.rxr, regedit.exe и т.д.;
- ну и конечно=же локализации вышеперечисленных файлов с разшырением *.mui;
эти файлы нужны для применения к ним патчеров графических ресурсов созданных Resources Editor ’ом.
Автор: ruslrusl
Дата сообщения: 13.04.2010 19:13
v1rtyaluk

Цитата:
Я хотел узнать есть-ли способ как-то быстро перечислить все эти файлы, допустим, в одной строке, а компилятор их не тронет....


Берешь и сам засовываешь их сперва в некий список, например "СПИСОК". Потом каждый файл используя foreach просматриваешь, находиться ли этот файл в этом списке "СПИСОК".
Я лично сделал бы так....
Автор: blaro
Дата сообщения: 13.04.2010 21:19
ruslrusl

Цитата:
Берешь и сам засовываешь их сперва в некий список, например "СПИСОК". Потом каждый файл используя foreach просматриваешь, находиться ли этот файл в этом списке "СПИСОК".
Я лично сделал бы так....

Согласен.
Может проще сделать список типов/категорий файлов которые надо обработать или исключить?
Автор: SerBUser
Дата сообщения: 14.04.2010 01:04
Mike13x13
Сделал так:

Код:
SPWeb site = SPContext.Current.Web;
string nameDir=SPContext.Current.List.Title.ToString();
SPList oList = site.Lists[nameDir];
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("c:\\"+nameDir);
if (!di.Exists)
di.Create();
nameDir="c:\\"+nameDir+"\\";
int k = oList.Items.Count;
for (int i = 0; i < k; i++)
{
SPListItem item=oList.Items[i];
SPAttachmentCollection oattaches = item.Attachments;
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(nameDir+ item.Title.ToString());
if (!dir.Exists)
dir.Create();
for (int l = 0; l < oattaches.Count; l++)
{
string fileName = oattaches[l];
string fileURL = oattaches.UrlPrefix + fileName;
SPFile file = site.GetFile(fileURL);
string fileNames = nameDir+ item.Title.ToString() + "\\" + fileName+" ";
System.IO.FileStream fs = new System.IO.FileStream(fileNames, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None);
byte[] binFile = file.OpenBinary();
fs.Write(binFile,0,binFile.Length);
fs.Close();
}
}

Автор: dneprcomp
Дата сообщения: 14.04.2010 01:38
SerBUser

FileTime: Getting and setting the file time in .NET
File Information: Characteristics of a File
Автор: ruslrusl
Дата сообщения: 14.04.2010 08:47
столкнулся с данной проблемой, как решить?? Имеется код:

Код:
public class CVector3
{
     public float x, y, z;


public CVector3(float X, float Y, float Z)
{
x = X; y = Y; z = Z;
}
public static CVector3 operator *(CVector3 vVector)
     {
         // Return the scaled vector
         return CVector3(x * vVector.x, y * vVector.y, z * vVector.z);
     }
Автор: SerBUser
Дата сообщения: 14.04.2010 09:18
dneprcomp
Что-то я походу не так делаю:
Беру дату и время

Код:
SPFile file = site.GetFile(fileURL);
DateTime datetime = System.IO.File.GetCreationTime(file.ToString());
Автор: Omicron_Persey_8
Дата сообщения: 14.04.2010 13:04
ruslrusl
Да все элементарно: если перегружаешь бинарный оператор, то в методе должно быть ДВА операнда

Код: public static Vector3 operator *(Vector3 left, Vector3 right) { }
public static Vector3 operator *(Vector3 left, float right) { }
Автор: Mike13x13
Дата сообщения: 14.04.2010 14:11
SerBUser
Посмотри под дебагером участок кода, где получается и устанавливается время. С виду должно работать.
Автор: dneprcomp
Дата сообщения: 14.04.2010 16:22
SerBUser
Убери ToString везде.

File.SetCreationTime(fileName, fileTime);
Автор: SerBUser
Дата сообщения: 15.04.2010 07:14
dneprcomp

Цитата:
Убери ToString везде.

Убрал в DateTime datetime = System.IO.File.GetCreationTime(file); - так с ошибкой вываливает
Автор: dneprcomp
Дата сообщения: 15.04.2010 07:30
SerBUser
File - резервное системное слово. Не употребляй системные названия как имена переменных.
Внимательнее к примеру на сайте. Применяй только минимально необходимые изменения.
Автор: SerBUser
Дата сообщения: 15.04.2010 07:50
dneprcomp
Спасибо, я просто C# первый раз в глаза вижу, сложновато пока. Но ничего все равно не изменилось - дата и время у сохраненных файлов текущие. Меня смущает то, что в System.IO.File.GetCreationTime передается http-адрес файла. Это может влиять?
Автор: dneprcomp
Дата сообщения: 15.04.2010 08:02
SerBUser
Скорее всего да. Все эти функции расчитаны на работу с файловой системой. При обращении по http работа происходит не через файловую систему.
И права на изменение файлов на сайте тоже надо иметь.
Автор: SerBUser
Дата сообщения: 15.04.2010 08:08
dneprcomp

Цитата:
Скорее всего да. Все эти функции расчитаны на работу с файловой системой. При обращении по http работа происходит не через файловую систему.
И права на изменение файлов на сайте тоже надо иметь.

Так я ж вроде не меняю там файл - я только читаю его и дату и время создания. У пользователя есть права. А каким-то еще способом эту задачу можно решить - может я не тем путем иду?

Добавлено:
С одним разобрался у SPFile есть свойство TimeCreated - теперь дату и время файлов определяет правильно, осталось изменить у сохраняемых файлов.

Код:
SPFile filea = site.GetFile(fileURL);
DateTime crdatetime = filea.TimeCreated;
System.IO.FileStream fs = new System.IO.FileStream(fileNames, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None);
byte[] binFile = filea.OpenBinary();
fs.Write(binFile,0,binFile.Length);
fs.Close();
System.IO.File.SetCreationTime(fileNames, crdatetime);
Автор: dneprcomp
Дата сообщения: 15.04.2010 16:13
SerBUser
1.Попробуй менять время для локально расположенного файла. Если меняет, значит дело в нттр.
2. Скачай пример и попробуй менять время для локально расположенного файла. Если меняет, попробуй подставить свой нттр адрес.
Автор: SerBUser
Дата сообщения: 16.04.2010 01:16
dneprcomp
В строке System.IO.File.SetCreationTime(fileNames, crdatetime) fileNames - это путь на локальном диске пользователя, т.е. я вложения с портала сохраняю на диск.
Автор: dneprcomp
Дата сообщения: 16.04.2010 01:51
SerBUser
Я просто подставил значения и все работает
System.IO.File.SetCreationTime("c:\123.txt", "01/01/1990")
Проверяй чему равны переменные fileNames, crdatetime перед исполнением.
Если в crdatetime лежит нормальная date в формате xx/xx/xxxx попробуй подставить все же crdatetime.tostring
Или может формат сo временем не нравиться. Тогда отформатируй в xx/xx/xxxx перед присвоением.
Автор: SerBUser
Дата сообщения: 16.04.2010 08:47
dneprcomp
Огромное спасибо за помощь! Все получилось.
Автор: v1rtyaluk
Дата сообщения: 18.04.2010 22:43
что нужно писать обработчик событий button1_Click для вызова перезагрузки компьютера???
Автор: Omicron_Persey_8
Дата сообщения: 19.04.2010 07:58
v1rtyaluk
Проще всего вот так

Код: Process.Start("shutdown.exe", @"/r /t 0");
Автор: mrherbrooks
Дата сообщения: 19.04.2010 07:59
v1rtyaluk
в соответствие с этим
внимательно читать про привилегии.
пример реализации не сложно найти на С++.
Автор: ruslrusl
Дата сообщения: 19.04.2010 08:02
v1rtyaluk

писал не сам, а нашел


Код:
using System.Runtime.InteropServices;

class reboot
{
//импортируем API функцию InitiateSystemShutdown
[DllImport("advapi32.dll", EntryPoint = "InitiateSystemShutdownEx")]
static extern int InitiateSystemShutdown(string lpMachineName, string lpMessage, int dwTimeout, bool bForceAppsClosed, bool bRebootAfterShutdown);
//импортируем API функцию AdjustTokenPrivileges
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
//импортируем API функцию GetCurrentProcess
[DllImport("kernel32.dll", ExactSpelling = true)]
internal static extern IntPtr GetCurrentProcess();
//импортируем API функцию OpenProcessToken
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
//импортируем API функцию LookupPrivilegeValue
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
//импортируем API функцию LockWorkStation
[DllImport("user32.dll", EntryPoint = "LockWorkStation")]
static extern bool LockWorkStation();
//объявляем структуру TokPriv1Luid для работы с привилегиями
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid
{
public int Count;
public long Luid;
public int Attr;
}
//объявляем необходимые, для API функций, константые значения, согласно MSDN
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
//функция SetPriv для повышения привилегий процесса
private void SetPriv()
{
TokPriv1Luid tkp; //экземпляр структуры TokPriv1Luid
IntPtr htok = IntPtr.Zero;
//открываем "интерфейс" доступа для своего процесса
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok))
{
//заполняем поля структуры
tkp.Count = 1;
tkp.Attr = SE_PRIVILEGE_ENABLED;
tkp.Luid = 0;
//получаем системный идентификатор необходимой нам привилегии
LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tkp.Luid);
//повышем привилигеию своему процессу
AdjustTokenPrivileges(htok, false, ref tkp, 0, IntPtr.Zero, IntPtr.Zero);
}
}
//публичный метод для перезагрузки/выключения машины
public int halt(bool RSh, bool Force)
{
SetPriv(); //получаем привилегия
//вызываем функцию InitiateSystemShutdown, передавая ей необходимые параметры
return InitiateSystemShutdown(null, null, 0, Force, RSh);
}
//публичный метод для блокировки операционной системы
public int Lock()
{
if (LockWorkStation())
return 1;
else
return 0;
}
Автор: vlary
Дата сообщения: 20.04.2010 00:15
Проблема такая. Делаю на C# и ASP.Net некоторое Web Application. Написан модуль, который перехватывает запросы к Web серверу и что-то с ними делает. Если создаю виртуальный сайт и указываю папку где Application в качестве директории, все работает. Если делаю просто виртуальную директорию, указывая ту же папку, то работать перестает. Страница просто тупо загружается, перехват не работает.
В чем может быть проблема?
Автор: BlackVetal
Дата сообщения: 20.04.2010 05:20
ruslrusl
Про книги нужно спрашивать в соответствующей ветке - английские книги и русские книги
Автор: May_Johnson
Дата сообщения: 21.04.2010 13:23
Услышал сегодня тут http://www.gotdotnet.ru/blogs/jeje/7651/ а потом прочитал тут http://nesteruk.wordpress.com/2010/04/15/st-petersburg-vs2010launch/ очень интересные вещи про портативную версию новой VS, но конкретных сведений не давали, может кто знает больше?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.