나는 우리의 응용 프로그램 중 하나를 업데이 트하는 중입니다. .NET 2.0을 사용해야합니다. (나는 아직 테스트하지 않은 비록 내가 있으리라 믿고있어, 너무 비스타) 한 부분은Vista/Windows 7의 데스크톱에 파일 저장 .
FileStream fs = new FileStream(Environment.GetFolderPath
(Environment.SpecialFolder.DesktopDirectory), FileMode.Create);
사용하여 바탕 화면에 파일을 생성하지만 윈도우 7의 UnauthorizedAccessException를 얻을. 나는 고도를 조사했다. (전체 프로그램이 아니라 파일을 생성하고 그에 대한 조치를 취할 별도의 어셈블리를 위해); 그러나 그게 필요합니다 .NET 3.0 또는 3.5. .NET 2.0을 사용하여 Desktop 폴더에 액세스 할 수있는 방법이 있습니까? (관리자로 프로그램을 실행하도록 요구하는 것도 옵션이 아닙니다.)
(나는 검색을 수행했으며, 내가 묻는 질문과 가까운 유일한 질문은 File creation fails in standard account (Vista)이지만 앱 전체를 높이는 것을 의미합니다. 및 .NET 2.0 특정하지, 그래서 나는이 중복)
편집하지 믿습니다 :
와우, 정말 바보되고 있었다. 이것은 실제로 정상적으로 작동합니다. C : \ Users \ MyUser \ Desktop이라는 파일을 만들려고했습니다. 죄송합니다. 혼란을 드려 죄송합니다.
편집 : 여기에 예외의 텍스트는 다음과 같습니다
System.UnauthorizedAccessException was unhandled
Message="Access to the path 'C:\\Users\\MyUser\\Desktop' is denied."
Source="mscorlib"
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)
at MyProgram.Prog.SaveDiagnostic(String filename, String text) in C:\Source\MyProgram\Prog.cs:line 95
at MyProgram.Form1.buttonGenDiagnostic_Click(Object sender, EventArgs e) in C:\Source\MyProgram\Form1.cs:line 4729
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Northwoods.CRM.Import.Form1.Main(String[] args) in I:\WebProspect\Source\Northwoods.CRM.Import\Form1.cs:line 2616
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
나는 전체 오류 추적을위한 완벽한 오류 exception.ToString()을 게시해야한다고 생각합니다. 이것은 관리자 계정에 문제가 없기 때문입니다. Environment.GetFolderPath는 현재 프로그램을 실행중인 현재 사용자의 올바른 바탕 화면을 항상 반환하며 현재 사용자는 항상 바탕 화면에 대한 모든 권한을 가지고 바탕 화면 경로에서 파일을 만들거나 삭제합니다. 그러나 우리는 비 관리자 계정에 대한 비스타에서이 작업을 수행합니다. Windows 7에서는 곧 테스트 할 예정이지만 자세한 스택 추적을 게시 할 것을 주장합니다. –
그것은 현재 사용자에 대한 올바른 데스크탑 폴더를 얻지 만, Win7이 프로그램에서 아무 것도 수정하지 못한다고 생각합니다. 그래도 전체 예외를 게시 할 것입니다. – NickAldwin
@ 닉 :이 아이러니 한 것은 문제를 재현하려고했을 때와 똑같은 예외를 발생 시켰습니다. 코드를 복사하여 붙여 넣지 않았지만 비슷한 것을 작성하고 예외가 발생한 다음 실제 파일 이름을 경로에 추가하여 작동하도록했습니다. 나는 당신의 코드가 똑같은 짓을 한 것을 결코 알지 못했다. 필자는 일반적으로 코드 샘플에 줄 바꿈을 넣어 가로 스크롤 막대를 얻지 않으려 고합니다. 그렇지 않으면 이와 같은 것을 놓치기가 더 쉽습니다. – MusiGenesis