本人发现下面两个小问题,与大家讨论。
1:程序运行后,可以移动exe的位置和重命名exe文件。但程序会锁定启动目录。
用下面代码测试发现 textBox1 textBox2 结果始终不变。
        private void timer1_Tick(object sender, EventArgs e)
        {
            textBox1.Text = Application.StartupPath;
            textBox2.Text = Application.ExecutablePath;
            File.Create("aa.aa");
            GC.Collect();
        }
为什么程序运行后,exe文件就可以随便移动位置?难道windows是把整个exe都放进内存里了?
2:把Form的构造函数里面加上Dispose()后,Application.Run(new Form1())会报错。
        public Form1()
        {
            InitializeComponent();
            Dispose();
        }
错误信息如下:Cannot access a disposed object.
Object name: 'Form1'.日有所思,这两个问题怎么解释?

解决方案 »

  1.   

    1.
    2.荒唐。刚创建的Form又Dispose掉,接下来自然是访问出错的了。
      

  2.   

    1.其实第一个现象很怪异,因为平常的Windows应用程序在执行的时候是受到保护的,程序执行的时候就不能更改、删除或重命名文件的。但.Net程序似乎不在此内,而更怪异的是,如果程序在执行,使用Visual Studio不能重新生成文件。
      

  3.   

    又试验了一下,.Net程序是不能删除,但更名、移动都可以,难道说,只要文件存在,.Net Framework就能找到它?
      

  4.   

    1.是很神奇;我试了一下,即使你copy出来后单独运行,也会和调试状态一样,不能删除,可以重命名和剪切;但剪切的时候只是复制一份文件,谁解释一下?
    2.Application.Run(new Form1());的时候肯定会Show()吧,你都Dispose了肯定会出错的。
      

  5.   

    Dispose回收资源,再访问肯定不行
    只要进程列表中有相关进程,程序就在运行中,可同时运行多个进程
      

  6.   

    不仅是.net程序会这样,非托管程序也会这样。
    我拿winrar,winhex实验了,运行时候也可以重命名,移动文件。但是不能删除。
      

  7.   

    说一下我的平台:WinXP sp3 enu , vs2008 , .net framework 3.5 sp1还有这么个现象,生成好exe后,直接运行debug文件夹内的exe,然后移动到其他文件夹或者重命名后,vs是可以重新build一个exe出来,两个exe是完全相同的。在进行调试的时候,你可以移动debug文件夹下的Test.exe和Test.vshost.exe这两个文件。
    然后在调试过程中修改代码,代码也可以应用。