当前位置:编程学习 > C#/ASP.NET >>

程序间共享变量 求解

一个解决方案里有三个项目
每个项目都需要用户登录。
三个项目有一个共用(通过引用)的dll文件,dll文件里有一个类型为bool的 isLogin变量

希望达到的效果是:
    用户在任何一个项目的程序里第一次登录时,isLogin标记为true,再打开第二个项目程序时,程序自动读取isLogin变量,如果为true则第二个项目的程序不弹出登录窗口,否则弹出登录窗口要求登录。
    如果其中有一个程序用户名登出时,再打开其它程序,新的程序要求用户登录。

可以实现这样的效果吗?

换句话说, 一个exe文件 更改了一个dll里的变量,那么在同目录下另外一个exe文件可以读取出这个被更改过的变量的值吗?


谢谢
--------------------编程问答-------------------- DLL中的数据
对每个进程来说都是新的数据
所以
直接在DLL中共享数据是不行的
最简单的方法是使用外部文件记录
比如数据库
复杂的方法是使用内存共享

--------------------编程问答-------------------- 推荐2个做法,程序自己搜索
(1)使用系统互斥量 Mutex类
(2)使用管道,特别的,WCF对管道通讯做了封装,可以直接使用。

但是对于你的需求,并不需要在进程间共享数据,直接读写配置文件就搞定了。 --------------------编程问答-------------------- 理论上是可以的。但是要做些手脚。
一般采用静态变量或者单例模式,但静态变量是应用程序域独立的,而每个进程创建时都有其独自的默认应用程序域,所以一般的方法是不行的。思路就是把Dll放到相同的应用程序域里,详见Cross AppDomain Singleton --------------------编程问答-------------------- 用COM应该可以做到,但是我没做过。 --------------------编程问答-------------------- 2楼说的对,你的这个功能用命名Mutex就可以了。 --------------------编程问答--------------------
引用 5 楼  的回复:
2楼说的对,你的这个功能用命名Mutex就可以了。


你确定?
你试用?
不要跟风
你知道使用.NET自带的Mutex会有什么问题吗?
因为.NET自带Mutex没有OpenMutex功能
只有CreateMutex功用
Mutex mutex = new Mutex(false, "IsLogin", out bCreateNew);
可以根据第三个参数bCreateNew来判断是否已经创建了IsLogin
但是如果本来没有创建,new Mutex()是先帮你创建好再返回bCreateNew
明白我说的意思了吗?
不知道我有没有说错


--------------------编程问答-------------------- 另外,使用Mutex
好像还有另外一个问题
我是说好像,没试过
现在已经Mutex了一个值
但程序退出后,这个值也会跟着消失
也就是说
楼主的两个EXE必须同时开着
omy
如果两个EXE都开着
那世界就变得更加美好了
不用内存
不用数据库
不用Mutex
直接SendMessage
解决

--------------------编程问答--------------------
引用 6 楼  的回复:
引用 5 楼  的回复:

2楼说的对,你的这个功能用命名Mutex就可以了。


你确定?
你试用?
不要跟风
你知道使用.NET自带的Mutex会有什么问题吗?
因为.NET自带Mutex没有OpenMutex功能
只有CreateMutex功用
Mutex mutex = new Mutex(false, "IsLogin", out bCreateNew);
可以……

Mutex.OpenExisting 方法被你吃掉了还是怎么了 --------------------编程问答--------------------
引用 8 楼  的回复:
Mutex.OpenExisting 方法被你吃掉了还是怎么了


原来真有Open
没有吃掉
只是没学过而且
那7楼的问题
能解决吗
要不要跟5楼道歉呢?

--------------------编程问答--------------------
引用 9 楼  的回复:
引用 8 楼 的回复:
Mutex.OpenExisting 方法被你吃掉了还是怎么了


原来真有Open
没有吃掉
只是没学过而且
那7楼的问题
能解决吗
要不要跟5楼道歉呢?

现在不用道歉,等你几十年之后会使用Mutex时再道歉吧。 --------------------编程问答-------------------- 几十年后
你可能(或许不用可能)Game Over
我哪找你道歉啊


--------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,