问题列表 - 第6393页

检测x86/x64并安装正确的.msi

我正在完成一个即将提交用于Windows徽标计划验证的应用程序.其中一个要求是x64兼容性.具体来说,Crystal Reports 2008必须在x64下运行.

我的问题是Crystal Reports basic 2008(与Visual Studio 2008一起打包的版本)没有合并模块,必须使用提供的.msi安装程序进行安装.它们为x86和x64提供单独的安装程序.

那么如何在安装过程中检测x86和x64,然后运行相应的Crystal msi?没有合并模块,这甚至可能吗?

编辑:

这个:

IF PROCESSOR_ARCHITECTURE == x86 AND
   PROCESSOR_ARCHITEW6432 NOT DEFINED THEN
   // OS is 32bit
ELSE
   // OS is 64bit
END IF
Run Code Online (Sandbox Code Playgroud)

似乎告诉我如何检测它(感谢MicSim).但是我如何在MSI中执行此操作?这是一个自定义动作吗?然后,如何为x32和x64晶体报告触发不同的所需msi?

为什么x86水晶安装程序不能在WOW64下工作?您必须安装x64 Crystal才能使用WOW64 x86应用程序.令人沮丧的...

编辑2:

好的,所以检测x86/x64似乎在这里介绍.现在如何手动触发您选择的msi?

windows-installer x86-64 merge-module crystal-reports

4
推荐指数
1
解决办法
1万
查看次数

从Linux上的根程序获得对tty设备的独占访问权限

我有一个在Linux上以root身份运行的程序,与tty交谈(实际上是一个实现为tty的LCD).值得的设备是/ dev/ttyUSB0.我想让我写入该设备的程序能够独占访问该设备,以免受到同时运行的其他程序实例的干扰.

我看到有一个名为TIOCEXCL的ioctl选项会阻止设备的额外打开,除非发出TIOCEXCL ioctl,否则对同一文件的多次open()调用将成功.这将阻止除root权限进程之外的其他打开. " 我对此进行了测试,它的工作方式与广告一样:如果非root用户尝试打开/ dev/ttyUSB0(一旦我更改了权限),那么打开失败,例如"设备忙",如果root用户尝试打开它, 有用.

理想情况下我想要的是这种独家访问tty以便为root用户工作的方法.所以我有多个root用户使用写入LCD的程序,但不知何故他们对LCD(tty)的访问将被序列化.显然,TIOCEXCL ioctl选项对我不起作用,因为它不会阻止root用户打开已经打开的tty设备.

我想这里有很多选择,但我会向所有人伸出援手,看看你是否还有其他想法或建议.

  1. 也许我错过了使用TIOCEXCL的一些东西......

  2. 也许还有其他方式通过open()或ioctl()或what-not获得独占访问权限.

  3. 如果有某种方法我可以检测到某个其他进程打开了设备,我可以等待并重试.我知道lsof,但我不愿意从这个程序中调用它只是为了学习这个.并且存在竞争条件.(也许我可以克服那个?:))

  4. 我可以实现锁定,就像显然用来获得对tty设备的独占访问.

更新1:

由于写入LCD设备的唯一程序是我的,我倾向于执行类似以下(伪代码)的操作来锁定代码:

f = open("/dev/ttyUSB0", O_RDWR)
flock(f, LOCK_EX)

// do any ioctl's, etc.

// do any write's

// sleep a tad to not flash messages too fast on LCD
nanosleep({0, 250000000}, NULL)

flock(f, LOCK_UN)
close(f)
Run Code Online (Sandbox Code Playgroud)

c unix linux tty

1
推荐指数
1
解决办法
7406
查看次数

了解框架

了解框架的编写方式和原因的最佳方法是什么?

php frameworks open-source

5
推荐指数
2
解决办法
1335
查看次数

如何构建C++应用程序,它运行在普通的旧版XP SP2上,使用Visual Studio 2008并没有并排的DLL?

我想只用一次调用编译一个C++项目,WinExec以便用一些命令行参数启动另一个可执行文件.我不知道,指定在我的项目,以获得产生,无需微软并排侧的DLL,我不希望有安装我的目标系统上工作的可执行什么设置.任何提示?

症状是一个无法启动的应用程序,以下事件被写入应用程序日志(从法语自由翻译):

Error, SideBySide, event #33
Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" cannot be found. 
Run Code Online (Sandbox Code Playgroud)

更新:我知道使用WinExec是不好的做法,但它就像一个魅力,微软不可能在任何未来的API版本中删除它,不是吗?

c++ crt side-by-side visual-studio-2008

1
推荐指数
2
解决办法
677
查看次数

切断给定字符串的文件名和扩展名

我构建了一个小脚本,用于解析给定文件类型的文件的目录,并将该位置(包括文件名)存储在数组中.看起来像这样:

def getFiles(directory)
  arr = Dir[directory + '/**/*.plt']
  arr.each do |k|
    puts "#{k}"
  end
end
Run Code Online (Sandbox Code Playgroud)

输出是路径和文件.但我只想要这条道路.

而不是/foo/bar.txt我只想要/ foo /

我的第一个想法是regexp,但我不知道该怎么做.

ruby regex string path

0
推荐指数
1
解决办法
2366
查看次数

通过.NET运行cmd命令?

System.Diagnostics.Process proc0 = new System.Diagnostics.Process();
proc0.StartInfo.FileName = "cmd";
proc0.StartInfo.WorkingDirectory = Path.Combine(curpath, "snd");
proc0.StartInfo.Arguments = omgwut;
Run Code Online (Sandbox Code Playgroud)

现在有些背景......

string curpath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Run Code Online (Sandbox Code Playgroud)

omgwut是这样的:

copy/b a.wav + b.wav + ... + y.wav + z.wav output.wav

一切都没有发生.显然有些不对劲.我也试过"复制"作为可执行文件,但这不起作用.

.net c# cmd process

4
推荐指数
2
解决办法
2万
查看次数

C++显示异常时的堆栈跟踪

如果抛出异常,我想有办法向用户报告堆栈跟踪.做这个的最好方式是什么?是否需要大量的额外代码?

回答问题:

如果可能的话,我希望它是便携式的.我想要弹出信息,因此用户可以复制堆栈跟踪并在出现错误时通过电子邮件发送给我.

c++ exception-handling exception stack-trace

183
推荐指数
9
解决办法
19万
查看次数

模拟对象 - 将所有方法声明为虚拟或使用接口?

在.net中,与Java不同,默认情况下方法不是虚拟的.为了使用大多数模拟对象框架,您必须在"真实"对象上将您想要在模拟上使用的方法标记为虚拟,或者您必须有一个可以模拟被测试的类的接口接受代替实施.

将每个方法标记为虚拟似乎是不好的形式,但是为每个类定义一个接口似乎也是不好的形式.

什么是最好的事情?

.net unit-testing mocking

12
推荐指数
2
解决办法
2297
查看次数

push_back用于向量,双端队列和列表

我正在尝试优化C++例程.这个例程的主要瓶颈是对象向量的push_back().我尝试使用deque而不是尝试了一个列表.但奇怪的是(与理论相反)deque和list实现比vector对应运行得慢得多.

事实上,甚至clear()对于deque和list实现来说比向量对应运行慢得多.在这种情况下,Vector实现似乎是最快的,而列表实现是最慢的.

有什么指针吗?

注意:vector reserve()可以加快实现速度但不能完成,因为它的大小未知.

谢谢.

c++ stl

11
推荐指数
2
解决办法
7040
查看次数

python中是否有一个方法,就像os.path.split一样用于其他分隔符?

我想用这样的东西:

os.path.split("C:\\a\\b\\c")
Run Code Online (Sandbox Code Playgroud)

有了这种输出:

('C:\ a\b','c')


但是我希望它可以在其他分隔符上工作:

method ('a_b_c_d')
Run Code Online (Sandbox Code Playgroud)

有了这种输出:

('A B C D')

python string

0
推荐指数
1
解决办法
463
查看次数